我在我的sln中使用visual studio存在一些项目:Common,Trader
在Common中我在命名空间Helper中有类Print
namespace Helper{
template<T>
class Print{
template<T>
static PrintEnum(std::ostream &os, const std::string& prefix,const T& val){
os << prefix << ":" << val;
}
};
}
在项目Trader中,文件Typedef.h中存在一些枚举,如下所示:
namespace Market{
enum Coin{USD,JPY,EUR};
}
并在类平台中存在函数print,如下所示:
namespace Market{
void Platform::PrintTheBest(std::ostream &os){
Coin best = USD;
Helper::Print::PrintEnum(os, std::string("Best"),best);
}
}
我想覆盖&lt;&lt;用于打印枚举硬币如下:
std::ostream& operator<<(std::ostream& , const Coin& coin){
.....
}
但我不知道在哪里添加操作员代码。
在Common项目中,硬币枚举不存在,如果我在Trader项目中添加运算符,我会得到链接错误unresolve external
答案 0 :(得分:0)
为用户定义的类型实现运算符时,需要以ADL(依赖于参数的查找)可以找到它们的方式实现它。 ADL在与函数参数关联的名称空间中查找函数。由于输出运算符涉及的唯一命名空间是命名空间std
以及定义用户定义类型的命名空间。由于不允许向命名空间std
添加任何内容,因此用户定义类型的命名空间是唯一的选项。