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