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

时间:2011-05-03 02:13:52

标签: c++ templates

显式模板实例化是进入cpp还是头文件?

3 个答案:

答案 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文件引用的内容,那么这将存在于头文件中。