Явное создание экземпляра
Явное создание экземпляров можно использовать для создания шаблонного класса или функции, чтобы обойтись без их использования в коде. Так как при создании библиотеки (.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
Ключевое слово в специализации применяется только к функциям-членам, определенным вне тела класса. Функции, определенные внутри объявления класса, рассматриваются как встраиваемые; для них всегда создаются экземпляры.
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по