我很清楚这是一个非常新的问题,对此我深表歉意,但我一直在搜索,但找不到解决方案。
我有以下文件:
headertest.hpp
template<typename t>
class HeaderTest {
private:
int x;
public:
//HeaderTest();
t addition(t a, t b);
};
执行测试.cpp
#include "headertest.hpp"
template<typename t>
t HeaderTest<t>::addition(t a, t b) {
return a + b;
}
int main() {
int x = 2;
int y = 3;
}
假设我想对这两个整数 x 和 y 求和,我将如何使用我的方法加法?
最佳答案
int main() {
int x = 2;
int y = 3;
HeaderTest<int> ht; // Instantiate a HeaderTest
int z = ht.addition(x, y); // Use its member function.
}
请注意,模板定义不应在 cpp 文件中。这在这里有效,因为 main
在同一个文件中,但您必须将它放在标题中才能正常使用。
编辑关于 header /cpp 问题。
你已经完全理解了。声明(接口(interface))放在头文件中,定义(实现,即实际代码)放在 cpp 文件中。
但是,模板是这个规则的异常(exception)。模板的定义必须在其实例化时完全可访问。说当您使用模板时,您必须包含其所有 源代码(与“普通”对象相反,其声明就足够了),这有点含糊。最简单的方法是什么?将其全部放在标题中。
如果这对您来说似乎不干净,还有一个替代方案:将您的模板定义放在第三个文件中,通常称为“模板实现文件”和扩展的 .tpp。然后,只需 #include
您的头文件底部的 tpp 文件即可。
关于c++ - 在已在源中重载的 header 中使用模板中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25549472/