Хранение определений функций шаблона 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, но хочу портировать на другие среды.

Ответы на вопрос(11)

Ваш ответ на вопрос