Хранение определений функций шаблона C ++ в файле .CPP
У меня есть некоторый шаблон кода, который я бы предпочел сохранить в файле CPP вместо встроенного в заголовке. Я знаю, что это можно сделать, если вы знаете, какие типы шаблонов будут использоваться. Например:
.h file
class foo
{
public:
template <typename T>
void do(const T& t);
};
.cpp file
template <typename T>
void foo::do(const T& t)
{
// Do something with t
}
template void foo::do<int>(const int&);
template void foo::do<std::string>(const std::string&);
Обратите внимание на две последние строки - шаблонная функция foo :: do используется только с ints и std :: strings, поэтому эти определения означают, что приложение будет ссылаться.
Мой вопрос - это противный хак или это будет работать с другими компиляторами / компоновщиками? В настоящее время я использую только этот код с VS2008, но хочу портировать на другие среды.