Шаблоны с фиктивной функцией 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 >
,
Поэтому моей первой мыслью было:
- Предотвратить неявную реализацию
Other::foo< MyType >
в mylib.cpp, объявив его. - Определите его в другом TU (mylib_foo.cpp).
- Создать макет в модульном тесте cpp.
- Вставьте макет раньше, чем mylib, в строке ссылки задачи модульного теста.
Я не могу использовать явное объявление экземпляра в mylib.cpp, так как мне нужно поддерживать C++03. Но я могу объявить специализацию и определить ее в mylib_foo.cpp. Однако в этом определении мне не разрешается просто создавать экземпляр основного шаблона с помощью MyType
и назовите это, так как я уже специализировал это.
Единственный выбор, который мне остается оставить, - это явное создание экземпляра первичного шаблона в mylib_foo.cpp и полагаться на тот факт, что он искажает так же, как объявление специализации.
Есть лучшие предложения? В идеале, я бы не хотел слишком сильно искажать реализацию lib, чтобы сделать ее более смешной.