В этом вопросе принятый ответ включает шаблонную функцию объявление в заголовочном файле, в исходном файле которого есть определение . Чтобы сделать эту функцию шаблона также пригодной для использования в других единицах перевода, в исходном файле создаются явные экземпляры шаблона для каждого «разрешенного» использования. Пока это представляется мне стандартной практикой.
Однако в ответе также рекомендуется поместить соответствующий явный экземпляр шаблона объявлений в заголовочный файл. Я не видел эту практику раньше и хотел бы знать, требуется ли это по стандарту.
Вот небольшой пример:
хиджры
struct A
{
template<class T>
void g(T t);
};
a.cpp
#include "A.h"
template<class T>
void A::g(T t)
{ /* ... */ }
template void A::g(int); // Explicit instantiation of the definition.
main.cpp
#include "A.h"
int main()
{
A a;
a.g(0);
}
Формулировка в стандарте не дает мне понять, требуется ли также явное создание экземпляра декларации . По-видимому, это в первую очередь относится к «определению, которое никогда не создается в явном виде, неявное создание экземпляра в A.cpp
гарантированно не будет сохранено» (не показан), но я был бы признателен за разъяснение.