Предыдущие ответы описывают, каков sharepoint, но не делайте хорошего задания, описывающего, почему это популярно. Да, это дает Вам всем этот аккуратный материал управления документа из поля. Да, это интегрируется плотно с Office.
функции OOB являются 1/10-ми из целой истории. Sharepoint представляет всестороннюю.Net объектную модель, которая позволяет Вам настроить вещь к своему содержанию основ. Люди кодируют удивительный вещи с MOSS 2007. С объектной моделью можно создать и настроить сайты через код, в ответ на внешние события. Можно записать пользовательские "веб-части" (средства управления, размещенные на специальных страницах), которые используют и внутренний (sharepoint) и внешние данные.
Выезд Блоги Sharepoint для наблюдения то, что люди делают с ним.
Если вас интересует фиксированный тип шаблона для B
, то я поддерживаю ответ xtofl. Если вы хотите позже указать аргумент шаблона B
, C ++ не позволяет вам этого делать (хотя он будет изменен в C ++ 0x). Обычно вам нужен такой способ обхода:
template <typename T>
struct B_Ptr
{
typedef boost::shared_ptr< B<T> > type;
};
B_Ptr<char>::type pB0 = ...;
(Спасибо UncleBens за улучшения.)
Это будет
typedef shared_ptr< B<char> > B_Ptr;
B_Ptr p( new B<char> );
p->value = 'w';
То, что вы хотите, пока невозможно в C ++. Вам нужны «определения типов шаблонов», которые будут известны в C ++ 0x как «шаблоны объявления псевдонимов»:
template<typename T>
struct A {};
template<typename T>
using APtr = boost::shared_ptr<A<T>>; // <-- C++0x
int main() {
APtr<int> foo;
}
Думаю, вы могли бы сделать что-то подобное в C ++ 98 с помощью макроса, если действительно хотите.