c++ - 在同一类型的多个运算符重载的情况下如何避免 C++ ODR 违规
问题描述
如果在不同的翻译单元但在相同的构建目标中多次实现相同类型的运算符,我会遇到 ODR 违规问题。
例子:
模块 Test.exe 正在与 Test1.cpp 和 Test2.cpp 一起编译。哪些是使用通用类型TYPE
struct TYPE
{
FieldType1 Field1
...
FieldTypeN FieldN
};
Test1.cpp 和 Test2.cpp为TYPE实现特定的operator==()以仅根据某些值比较TYPE 。例如,我只需要检查Id字段并且不想填写所有其他字段以保持测试简短明了。像operator<<()这样的其他运算符也是如此
两个测试文件都使用外部测试库(BOOST TEST、hippomock 等),它使用operator==()进行类型比较。当我尝试构建测试时,我有一个关于多重定义的错误(或者在 MSVC 的情况下只是随机链接函数)。
我试图将每个运算符放入单独的命名空间,然后键入
using namespace::operator==;
在 *.cpp 文件中,但它没有帮助。
有没有可能避免这个问题?
解决方案
推荐阅读
- excel - 从一个表体范围向上查找到另一个表体范围
- html - 为什么删除填充会使我的固定元素在鼠标单击时上下跳跃?
- ffmpeg - ffmpeg mp4 到 hls vod,提取片段持续时间,无需重新编码
- php - 如何使用标签在 Laravel 刀片中的父级顶部显示子级视图?
- javascript - 可选参数的可选默认值
- android - Apache cordova apk 在 android 上无法正常运行
- ios - 如何将 Xamarin Forms iOS 应用程序部署到异地 iPhone 测试设备
- python - 在 Jupyter Lab 输出小部件的 for 循环中覆盖字符串
- c - 如何将 CLion 的输出发送到 Debian 上的 Gnome 终端?
- python - 在带有 mysql.connector 的正则表达式中使用变量