C++ 如何避免C++;同一类型的多个运算符重载时的ODR冲突
如果同一类型的运算符在不同的转换单元中但在同一构建目标中多次实现,我会遇到ODR冲突问题 例子: 正在使用Test1.cpp和Test2.cpp编译模块Test.exe。使用普通类型类型C++ 如何避免C++;同一类型的多个运算符重载时的ODR冲突,c++,operator-overloading,one-definition-rule,C++,Operator Overloading,One Definition Rule,如果同一类型的运算符在不同的转换单元中但在同一构建目标中多次实现,我会遇到ODR冲突问题 例子: 正在使用Test1.cpp和Test2.cpp编译模块Test.exe。使用普通类型类型 struct TYPE { FieldType1 Field1 ... FieldTypeN FieldN }; Test1.cpp和Test2.cpp为类型实现特定的运算符==(),以便仅根据某些值比较类型。例如,我只需要检查Id字段,不想填充所有其他字段以保持测试简短和清晰。对于另一个操
struct TYPE
{
FieldType1 Field1
...
FieldTypeN FieldN
};
Test1.cpp和Test2.cpp为类型实现特定的运算符==(),以便仅根据某些值比较类型。例如,我只需要检查Id字段,不想填充所有其他字段以保持测试简短和清晰。对于另一个操作符,如operatories,也一样,这违反了ODR规则。不,除了停止在两个TU中为同一类型定义全局可见运算符==之外,没有其他解决方案。为什么不能将这两个定义合并到一个文件中?为什么对于同一类型,您甚至有两个不同的相等运算符?似乎您正试图智取编写糟糕的库。此库是否可用于多种类型,还是仅用于一种
类型
?避免此库的方法是不提供多种实现。即使你能找到一种绕过语言规则的方法,你仍然会遇到一个令人困惑的事实:同一个操作符有多个实现
using namespace::operator==;