Добавьте Мероприятие календаря Outlook из ссылки на веб-страницу

Рассмотрите решение .

  1. Matt Price В C++, "статический класс" не имеет никакого значения. Самой близкой вещью является класс только со статическими методами и участниками.
  2. Используя статические методы только ограничит Вас.

то, Что Вы хотите, выражено в семантике C++, для помещения функции (для него функция) в пространстве имен.

Редактирование 11.11.2011

нет никакого "статического класса" в C++. Самое близкое понятие было бы классом только со статическими методами. Например:

// header
class MyClass
{
   public :
      static void myMethod() ;
} ;

// source
void MyClass::myMethod()
{
   // etc.
}

, Но необходимо помнить, что "статические классы" являются взломами в подобном Java виде языков (например, C#), которые неспособны иметь функции лица, не являющегося членом какой-либо организации, таким образом, они должны вместо этого переместить их в классах как статические методы.

В C++, что Вы действительно хотите, функция лица, не являющегося членом какой-либо организации, которую Вы объявите в пространстве имен:

// header
namespace MyNamespace
{
   void myMethod() ;
}

// source
namespace MyNamespace
{
   void myMethod()
   {
      // etc.
   }
}

, Почему это?

В C++, пространство имен более мощно, чем классы для "шаблона" статического метода Java, потому что:

  • статические методы имеют доступ к классам частные символы
  • , частные статические методы все еще видимы (если недоступный) всем, которые нарушают несколько инкапсуляцию
  • , статические методы не могут быть вперед - объявил
  • , статические методы не могут быть перегружены пользователем класса, не изменяя заголовок библиотеки
  • нет ничего, что может быть сделано статическим методом, который не может быть добит большего успеха, чем (возможно друг), функция лица, не являющегося членом какой-либо организации, в тех же пространствах имен пространства имен
  • имеет их собственную семантику (они могут быть объединены, они могут быть анонимными, и т.д.)
  • и т.д.

Заключение: не Делайте скопировать/вставить что шаблон Java/C# в C++. В Java/C# шаблон обязателен. Но в C++, это - плохой стиль.

Редактирование 10.06.2010

было аргументом в фаворе статическому методу, потому что иногда, нужно использовать статическую переменную члена парламента, не занимающего официального поста.

я не соглашаюсь несколько как шоу ниже:

"Статического члена парламента, не занимающего официального поста" решение

// HPP

class Foo
{
   public :
      void barA() ;
   private :
      void barB() ;
      static std::string myGlobal ;
} ;

Сначала, myGlobal называют myGlobal, потому что это - все еще глобальная частная переменная. Взгляд на источник CPP разъяснит что:

// CPP
std::string Foo::myGlobal ; // You MUST declare it in a CPP

void Foo::barA()
{
   // I can access Foo::myGlobal
}

void Foo::barB()
{
   // I can access Foo::myGlobal, too
}

void barC()
{
   // I CAN'T access Foo::myGlobal !!!
}

На первый взгляд, факт бесплатная функция barC не может получить доступ к Foo:: myGlobal кажется хорошей вещью с точки зрения инкапсуляции... Это прохладно, потому что кто-то смотрящий на HPP не будет в состоянии (если, обращаясь к саботажу) для доступа к Foo:: myGlobal.

, Но если Вы смотрите на него тесно, Вы найдете, что это - колоссальная ошибка: Не только Ваша частная переменная должна все еще быть объявлена в HPP (и так, видимая ко всему миру, несмотря на то, чтобы быть частным), но необходимо объявить в том же HPP все (как ВСЕГО) функции, которые будут разрешены получить доступ к нему!!!

Так использование частного статического участника похоже на обход, снаружи в обнаженном виде со списком Ваших возлюбленных, татуированных на Вашей коже: Никто не разрешен затронуть, но все в состоянии посмотреть на. И премия: у Всех могут быть названия разрешенных играть с Вашими участниками.

private действительно...:-D

"Анонимные пространства имен" решение

Анонимные пространства имен будут иметь преимущество создания вещей, частных действительно частный.

Первый, заголовок HPP

// HPP

namespace Foo
{
   void barA() ;
}

Только, чтобы быть уверенными Вы отметили: нет никакого бесполезного объявления зубца, ни myGlobal. Что означает, что никакое чтение заголовка не знает то, что скрыто позади barA.

Затем CPP:

// CPP
namespace Foo
{
   namespace
   {
      std::string myGlobal ;

      void Foo::barB()
      {
         // I can access Foo::myGlobal
      }
   }

   void barA()
   {
      // I can access myGlobal, too
   }
}

void barC()
{
   // I STILL CAN'T access myGlobal !!!
}

, Как Вы видите, как так называемый "статический класс" объявление, fooA и fooB все еще в состоянии получить доступ к myGlobal. Но никто больше не может. И никто больше за пределами этой CPP не знает fooB, и myGlobal даже существуют!

В отличие от "статического класса", идущего на обнаженной фигуре с ее адресной книгой, татуированной на ее коже, "анонимное" пространство имен полностью одето , который кажется вполне лучше инкапсулировавшим AFAIK.

это действительно имеет значение?

, Если пользователи Вашего кода не являются саботажниками (я позволю Вам как осуществление, находят, как можно получить доступ к половому органу общедоступного класса с помощью грязного неопределенного поведением взлома...), что private, private, даже если это видимо в private раздел класса, объявленного в заголовке.

однако, если необходимо добавить другую "закрытую функцию" с доступом к члену парламента, не занимающему официального поста, все еще необходимо объявить его ко всему миру путем изменения заголовка, который является парадоксом, что касается меня: , Если я изменяю реализацию своего кода (часть CPP), тогда интерфейс (часть HPP) не должен изменяться. Заключение в кавычки Leonidas: " Это - ИНКАПСУЛЯЦИЯ! "

Редактирование 20.09.2014

, Когда статические методы классов, на самом деле лучше, чем пространства имен с функциями лица, не являющегося членом какой-либо организации?

, Когда необходимо группироваться функции и канал что группа к шаблону:

namespace alpha
{
   void foo() ;
   void bar() ;
}

struct Beta
{
   static void foo() ;
   static void bar() ;
};

template 
struct Gamma
{
   void foobar()
   {
      T::foo() ;
      T::bar() ;
   }
};

Gamma ga ; // compilation error
Gamma gb ;  // ok
gb.foobar() ;     // ok !!!

, поскольку, если класс может быть шаблонным параметром, пространства имен не могут.

9
задан Georg Fritzsche 3 May 2010 в 07:48
поделиться

2 ответа

Создайте файл Outlook .ics

См. здесь для получения дополнительной информации. Пример находится в .NET, но он просто записывает вывод, поэтому его очень легко перевести в PHP.

9
ответ дан 4 December 2019 в 09:13
поделиться
<?php
//This is the most important coding.
header("Content-Type: text/Calendar");
header("Content-Disposition: inline; filename=filename.ics");
echo "BEGIN:VCALENDAR\n";
echo "PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN\n";
echo "VERSION:2.0\n";
echo "METHOD:PUBLISH\n";
echo "X-MS-OLK-FORCEINSPECTOROPEN:TRUE\n";
echo "BEGIN:VEVENT\n";
echo "CLASS:PUBLIC\n";
echo "CREATED:20091109T101015Z\n";
echo "DESCRIPTION:How 2 Guru Event\\n\\n\\nEvent Page\\n\\nhttp://www.myhow2guru.com\n";
echo "DTEND:20091208T040000Z\n";
echo "DTSTAMP:20091109T093305Z\n";
echo "DTSTART:20091208T003000Z\n";
echo "LAST-MODIFIED:20091109T101015Z\n";
echo "LOCATION:Anywhere have internet\n";
echo "PRIORITY:5\n";
echo "SEQUENCE:0\n";
echo "SUMMARY;LANGUAGE=en-us:How2Guru Event\n";
echo "TRANSP:OPAQUE\n";
echo "UID:040000008200E00074C5B7101A82E008000000008062306C6261CA01000000000000000\n";
echo "X-MICROSOFT-CDO-BUSYSTATUS:BUSY\n";
echo "X-MICROSOFT-CDO-IMPORTANCE:1\n";
echo "X-MICROSOFT-DISALLOW-COUNTER:FALSE\n";
echo "X-MS-OLK-ALLOWEXTERNCHECK:TRUE\n";
echo "X-MS-OLK-AUTOFILLLOCATION:FALSE\n";
echo "X-MS-OLK-CONFTYPE:0\n";
//Here is to set the reminder for the event.
echo "BEGIN:VALARM\n";
echo "TRIGGER:-PT1440M\n";
echo "ACTION:DISPLAY\n";
echo "DESCRIPTION:Reminder\n";
echo "END:VALARM\n";
echo "END:VEVENT\n";
echo "END:VCALENDAR\n";
?>

На случай, если кому-нибудь понадобится это в PHP. Я искал вот это.

14
ответ дан 4 December 2019 в 09:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: