显式模板实例化是进入cpp还是头文件?
答案 0 :(得分:18)
假设通过“显式模板实例化”,您的意思是
template class Foo<int>; // explicit type instantiation
// or
template void Foo<int>(); // explicit function instantiation
然后这些必须进入源文件,因为他们考虑了定义,因此受ODR的约束。
答案 1 :(得分:10)
我总是在cpp文件中完成它。在标题中,当标题包含在多个cpp文件中时,它至少会违反一个定义规则(通常情况下)。
答案 2 :(得分:-3)
其中一个。
如果要声明特定实例,可以在cpp文件中声明它。但是,如果您要声明一个类成员或将从多个cpp文件引用的内容,那么这将存在于头文件中。