Как избежать нарушения CDR ODR в случае множественных перегрузок операторов для одного типа - PullRequest
0 голосов
/ 23 мая 2018

У меня проблема с нарушением ODR в случае многократной реализации оператора одного и того же типа в разных единицах перевода, но в одной и той же цели сборки.

Пример:

Проверка модуля.exe компилируется с Test1.cpp и Test2.cpp.Которые используют общий тип TYPE

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

Test1.cpp и Test2.cpp реализуют специфический оператор == () для TYPE длясравнивайте TYPE только с точки зрения некоторых значений.Например, мне нужно проверить только поле Id и не хочу заполнять все остальные поля, чтобы тест был коротким и чистым.То же самое для других операторов, таких как operator << () </strong>

В обоих тестовых файлах используется внешняя тестовая библиотека (BOOST TEST, hippomock и т. Д.), В которой используется operator == () для сравнения типов.Когда я пытаюсь построить тест, у меня появляется ошибка о множественном определении (или просто случайная связанная функция в случае MSVC).

Я попытался поместить каждый оператор в отдельное пространство имен и затем набрать

using namespace::operator==;

внутри * .cpp файла, но это не помогает.

Можно ли избежать этой проблемы?

...