我可以从静态成员函数调用非成员静态模板化函数,其中定义被拆分为header和cpp:
// zero.cpp
class Zero
{
static void zero() { one(5); }
};
// one.h
template <typename T>
static void one(T& var);
// one.cpp
template <typename T>
void one(T& var) { }
// main.cpp
...
Zero::zero()
...
我遇到问题需要链接,我一直在对我试图在one.cpp中定义的函数进行未定义的引用。
最初我认为这是由于命名空间的问题,但所有文件现在都在同一个命名空间中。我在这里做了什么根本性的错误吗?
答案 0 :(得分:4)
模板定义需要在实例化时可见。也就是说,它需要以某种方式在标题中:
// one.hpp
template <typename T>
static void one(T& var)
{
// definition visible in header
}
虽然我不确定你为什么要它是静态的。
答案 1 :(得分:2)
作为对GMan回答的补充,我想请注意,您不能将T&
绑定到右值,例如5
类型的整数文字int
。 5不会绑定到int&
,但会绑定到const int&
。