Является ли явное создание экземпляра шаблона в файле cpp или header?

Является ли явное создание экземпляра шаблона в файле cpp или заголовке?

Ответы

Ответ 1

Я всегда делал это в файле cpp. В заголовке он будет нарушать одно правило определения, по крайней мере (в обычном случае), когда заголовок был включен в более чем один файл cpp.

Ответ 2

Предполагая, что "явное создание экземпляра шаблона" означает что-то вроде

template class Foo<int>; // explicit type instantiation
// or
template void Foo<int>(); // explicit function instantiation

то эти должны переходить в исходные файлы, поскольку они рассматривают определения и, следовательно, подчиняются ODR.

Ответ 3

Либо один.

Если вы объявляете конкретный экземпляр, вы можете объявить его в своем файле cpp. Однако, если вы объявляете члена класса или что-то, на что будут ссылаться, из нескольких файлов cpp, которые будут отображаться в вашем файле заголовка.