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

Non-template methods of a template class in .cpp file - Undefined reference?

本文关键字:模板方法 未定义 引用 文件 cpp      更新时间:2023-10-16

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

实际上,在使用时必须在headers/中定义的是"模板实体"(除非在其他地方发生显式实例化)。到目前为止,c++中还没有这样的术语,但将其添加到语言中的建议正在迅速增加,因为许多规则适用于"模板化实体",而不仅仅适用于模板。

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

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

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