Шаблоны с фиктивной функцией C++

У меня следующая дилемма:

someotherlib.h:

struct Other {
    //...
    template < typename T >
    void foo(const T& t){ //.. something }
};

mylib.cpp:

#include <someotherlib.h>

int needsFoo()
{
    //...
    MyType myObj = //..
    Other o = //..
    o.foo( myObj );
    //...
}

Мне нужно написать модульный тест для mylib, который вызывает needsFoo() и нужно издеваться Other::foo< MyType >,

Поэтому моей первой мыслью было:

  1. Предотвратить неявную реализацию Other::foo< MyType > в mylib.cpp, объявив его.
  2. Определите его в другом TU (mylib_foo.cpp).
  3. Создать макет в модульном тесте cpp.
  4. Вставьте макет раньше, чем mylib, в строке ссылки задачи модульного теста.

Я не могу использовать явное объявление экземпляра в mylib.cpp, так как мне нужно поддерживать C++03. Но я могу объявить специализацию и определить ее в mylib_foo.cpp. Однако в этом определении мне не разрешается просто создавать экземпляр основного шаблона с помощью MyType и назовите это, так как я уже специализировал это.

Единственный выбор, который мне остается оставить, - это явное создание экземпляра первичного шаблона в mylib_foo.cpp и полагаться на тот факт, что он искажает так же, как объявление специализации.

Есть лучшие предложения? В идеале, я бы не хотел слишком сильно искажать реализацию lib, чтобы сделать ее более смешной.

0 ответов