2008-12-24 52 views
4

我有一个模板类,它仅适用于夫妇的模板参数:如何在不创建对象实例的情况下强制创建模板代码?

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; 

但这会导致各种麻烦的(前主动态存储器分配被输入),我实际上不想创建一个实例 - 我只想为模板实例化生成对象代码。

任何想法?

回答

6

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

+0

当然,显式实例化是要走的路。只需将它们放入doIt.cpp:template class doer ; template class doer ; – 2008-12-25 00:12:22

相关问题