Он всегда встроенный (это означает, что это всегда внутренняя связь, имеющая встроенную семантику). На самом деле он может быть не встроенным, как встроенная функция, однако шаблон не является кодом. Это «шаблон для создания кода». Следовательно, он обычно находится в заголовке, за исключением особых случаев, см. Ниже.
Была идея сделать что-то еще под кодовым названием "ключевое слово экспорта". Он был удален из стандарта.
Особые случаи: вы можете скомпилировать шаблонные экземпляры в объектный файл, не используя их. Это единственный способ избежать вставки всего кода шаблона.
Вот как это делается:
template class std::vector<MyClass>;
Это заставит компилятор создавать экземпляр шаблона в текущем местоположении. C ++ 0x будет иметь синтаксис для принудительного выполнения компилятором , а не , а компоновщик будет искать инстанцирование шаблона в другом месте:
extern template class std::vector<MyClass>; // C++0x only