显式模板实例化应放在cpp文件还是头文件中?
假设你所说的“显式模板实例化”是指类似于以下的内容:
template class Foo<int>; // explicit type instantiation
// or
template void Foo<int>(); // explicit function instantiation
那么这些必须放在源文件中,因为它们被视为定义,因此受到ODR规则的约束。
我一直在cpp文件中完成这个。如果在头文件中这样做,至少会违反一个定义规则(one definition rule),特别是当该头文件被包含在多个cpp文件中时。(虽然有方法可以避免这种情况,在某些特定情况下非常有用)
任何一个都可以。
如果您要声明特定实例,可以在cpp文件中声明。但是,如果您要声明类成员或将从多个cpp文件引用的内容,则应将其放在头文件中。
inline
)始终受到 ODR 的约束。 - ildjarn