如果同一类型的多个运算符重载,如何避免C ++ ODR违规

时间:2018-05-23 17:47:30

标签: c++ operator-overloading one-definition-rule

如果在不同的翻译单元中对同一类型的操作符多次实现但在同一构建目标中,我遇到ODR违规问题。

实施例

使用Test1.cpp和Test2.cpp编译模块Test.exe。哪些是常用类型 TYPE

struct TYPE
{
   FieldType1 Field1
   ...
   FieldTypeN FieldN
};

Test1.cpp和Test2.cpp为 TYPE 实现特定的运算符==(),仅根据某些值比较 TYPE 。例如,我只需要检查 Id 字段,并且不希望填充所有其他字段以保持测试简短明了。对于其他运营商也是如此,例如运营商<<()

两个测试文件都使用外部测试库(BOOST TEST,hippomock等),它使用 operator ==()进行类型比较。当我尝试构建测试时,我有一个关于多个定义的错误(或者在MSVC情况下只是随机链接的函数)。

我尝试将每个运算符放入单独的命名空间,然后键入

using namespace::operator==;

在* .cpp文件中,但它没有帮助。

是否可以避免此问题?

0 个答案:

没有答案