在哪里添加覆盖运算符<<对于枚举

时间:2014-12-30 13:20:00

标签: c++ enums

我在我的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

1 个答案:

答案 0 :(得分:0)

为用户定义的类型实现运算符时,需要以ADL(依赖于参数的查找)可以找到它们的方式实现它。 ADL在与函数参数关联的名称空间中查找函数。由于输出运算符涉及的唯一命名空间是命名空间std以及定义用户定义类型的命名空间。由于不允许向命名空间std添加任何内容,因此用户定义类型的命名空间是唯一的选项。