【发布时间】:2014-09-11 14:12:47
【问题描述】:
我有一个类与模板化操作符 >> 建立友谊:
class MyInputStream
{
...
private:
std::istream& impl;
template<class T>
friend MyInputStream& operator>> (MyInputStream& stream, T& outParam);
}
现在我定义了运算符 >>
template<class T>
MyInputStream& operator>> (MyInputStream& stream, T& outParam)
{
stream.impl >> outParam;
return stream;
}
一切正常。
但是当我添加模板的特化时出现问题,比如“int”模板参数
template<>
MyInputStream& operator>> (MyInputStream& stream, int& outParam)
{
stream.impl >> outParam;
return stream;
}
然后我得到链接错误,即 int 的模板运算符已在 .obj 文件中定义。 请告诉我应该怎么做。
【问题讨论】:
-
你把专业化放在 cpp 文件中了吗?
-
我在你的代码中没有看到
friend这个词。 -
是的,你是对的。已更正
-
这可以被认为是stackoverflow.com/q/25529893/981959 的重复,尽管这也有关于使用
static的额外问题(这通常不是一个好的解决方案)