.cpp文件中模板类的非模板方法 - 未定义的引用?

时间:2016-08-22 08:30:15

标签: c++ function class templates

我知道必须在头文件中定义模板函数,出于某种原因我忘记了。但是我相信非模板函数,即使它们属于模板类,也可以在.cpp文件中定义。这是允许的吗?如果没有,为什么不呢?谢谢:))

1 个答案:

答案 0 :(得分:3)

实际上,必须在头文件/使用点定义的内容(除非在其他地方发生显式实例化)是“模板化实体”。到目前为止,在C ++中没有这样的术语,但是提议正在将其添加到语言中,因为许多规则适用于“模板化实体”而不仅仅适用于模板。

请参阅http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0391r0.html

原因应该是显而易见的。就像模板一样,模板的成员可以使用模板参数,因此它们的源必须可用于实例化。

解决这个问题的方法(如果成员函数不使用模板参数)是将函数放在非模板基类中,并从类模板继承该类。