Является ли явное создание экземпляра шаблона в файле cpp или заголовке?
Является ли явное создание экземпляра шаблона в файле cpp или header?
Ответ 1
Я всегда делал это в файле cpp. В заголовке он будет нарушать одно правило определения, по крайней мере (в обычном случае), когда заголовок был включен в более чем один файл cpp.
Ответ 2
Предполагая, что "явное создание экземпляра шаблона" означает что-то вроде
template class Foo<int>; // explicit type instantiation
// or
template void Foo<int>(); // explicit function instantiation
то эти должны переходить в исходные файлы, поскольку они рассматривают определения и, следовательно, подчиняются ODR.
Ответ 3
Либо один.
Если вы объявляете конкретный экземпляр, вы можете объявить его в своем файле cpp. Однако, если вы объявляете члена класса или что-то, на что будут ссылаться, из нескольких файлов cpp, которые будут отображаться в вашем файле заголовка.