Как заставить создание кода шаблона без создания экземпляра объекта?

У меня есть класс шаблона, который действителен только для пары параметров шаблона:

doIt.h:

// only int and float are valid T
template <typename t="">
class doer
{
public:
 void doIt();
}
</typename>

Я хочу скрыть реализацию внутри .cpp файла (для более быстрой компиляции, а также из-за его проприетарного):

doIt.cpp:

template <>
void doer<t>::doIt() { /* how to do it */ }
</t>

... и используйте его следующим образом: use.cpp:

int main( int, char** )
{
 doer<int>::doIt()
}
</int>

Вышеуказанное не связано, потому что реализация void doer:: doIt (void) никогда не была в области видимости в том месте, где она была вызвана.

Я могу заставить код сгенерироваться в doItv2.obj следующим образом:

doIt_v2.cpp:

template <>
void doer<t>::doIt() { /* how to do it */ }
doer<int> a; 
doer<real> b;
</real></int></t>

но это вызывает множество головных болей (динамическое распределение памяти до ввода основной), и я действительно не хочу делать экземпляр - я просто хочу, чтобы был создан объектный код для создания экземпляров шаблона.

Любые идеи?

1 ответ

См. статью Как создать исходный код шаблона. Я думаю, что вы после второго описанного там метода: явная реализация шаблона.

licensed under cc by-sa 3.0 with attribution.