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

C++ 如何在不创建对象实例的情况下强制创建模板代码?,c++,C++,我有一个仅对两个模板参数有效的模板类: doIt.h: // only int and float are valid T template <typename T> class doer { public: void doIt(); } //只有int和float是有效的 模板 阶级实践者 { 公众: void doIt(); } 我想将实现隐藏在.cpp文件中(为了更快地编译,也因为它是专有的): doIt.cpp: template <> void doe

我有一个仅对两个模板参数有效的模板类:

doIt.h:

// only int and float are valid T
template <typename T>
class doer
{
public:
   void doIt();
}
//只有int和float是有效的
模板
阶级实践者
{
公众:
void doIt();
}
我想将实现隐藏在.cpp文件中(为了更快地编译,也因为它是专有的):

doIt.cpp:

template <>
void doer<T>::doIt()  {  /* how to do it */ }
模板
void doer::doIt(){/*如何做*/}
。。。并按如下方式使用:use.cpp:

int main( int, char** )
{
   doer<int>::doIt()
}
int main(int,char**)
{
doer::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;
模板
void doer::doIt(){/*如何做*/}
实干家a;
实干家b;
但这会引起各种各样的麻烦(在输入main之前动态分配内存),我实际上不想创建一个实例——我只想生成模板实例化的目标代码


有什么想法吗?

见文章。我想您是在追求这里描述的第二种方法:显式模板实例化。

当然,显式实例化是一种方法。只需将它们放入doIt.cpp:template类doer;模板类执行器;