如何在不创建对象实例的情况下强制创建模板代码?

时间:2008-12-24 23:52:13

标签: c++

我有一个模板类,它只对几个模板参数有效:

doIt.h:

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

我想隐藏.cpp文件中的实现(为了更快的编译,也因为它的专有):

doIt.cpp:

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

...并按如下方式使用它:use.cpp:

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

以上内容无法链接,因为void doer :: doIt(void)的实现从未在调用它的位置进行。

我可以强制将代码生成到doItv2.obj中,如下所示:

doIt_v2.cpp:

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

doer<int> a;    
doer<real> b;

但是这会引起各种麻烦(在输入main之前动态内存分配),我实际上不想创建实例 - 我只想生成模板实例化的目标代码。

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

请参阅文章How to Organize Template Source Code。我想你是在那里描述的第二种方法:显式模板实例化。