显式模板实例化是在cpp还是头文件中?

Ave*_*y3R 17 c++ templates

显式模板实例化是在cpp还是头文件中?

ild*_*arn 18

假设通过"显式模板实例化",你的意思是

template class Foo<int>; // explicit type instantiation
// or
template void Foo<int>(); // explicit function instantiation
Run Code Online (Sandbox Code Playgroud)

然后这些必须放在源文件中,因为它们考虑了定义,因此受ODR的约束.

  • @aschepler:但是,显式模板实例化不再是模板,并且不受与模板相同的规则约束; 相反,它们遵循与普通类或函数定义相同的规则,(除了函数的"内联")总是*受ODR约束. (3认同)

Jer*_*fin 10

我总是在cpp文件中完成它.在标题中,当标题包含在多个cpp文件中时,它将违反一个定义规则,至少(在通常情况下).