Явное создание экземпляра

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

Примеры

Этот код явно создает экземпляры MyStack для int переменных и шести элементов:

template class MyStack<int, 6>;

Этот оператор создает экземпляр класса MyStack, но не резервирует пространство в памяти для полученного объекта. Код создается для всех членов.

В следующей строке явное создание экземпляра выполняется только для функции-члена конструктора.

template MyStack<int, 6>::MyStack( void );

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

Вы можете использовать extern ключевое слово, чтобы предотвратить автоматическое создание экземпляров элементов. Например:

extern template class MyStack<int, 6>;

Аналогично, определенные элементы можно пометить как внешние, для которых не был создан экземпляр.

extern template MyStack<int, 6>::MyStack( void );

Вы можете использовать extern ключевое слово для сохранения компилятора от создания одного кода экземпляра в нескольких модулях объектов. При вызове функции необходимо создать экземпляр шаблона функции с помощью указанных явных параметров шаблона по крайней мере в одном связанном модуле. В противном случае при создании программы вы получите ошибку компоновщика.

Примечание.

extern Ключевое слово в специализации применяется только к функциям-членам, определенным вне тела класса. Функции, определенные внутри объявления класса, рассматриваются как встраиваемые; для них всегда создаются экземпляры.

См. также

Шаблоны функций