Поделиться через


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

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

В следующем примере кода создается экземпляр класса MyStack для переменных int и 6 элементов.

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 в специализации применяется только к функциям-членам, которые были определены за пределами тела класса.Функции, определенные внутри объявления класса, рассматриваются как подставляемые; для них всегда создаются экземпляры.

См. также

Ссылки

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