我有一个模板类,它只对几个模板参数有效:
doIt.h:
// only int and float are valid T
template <typename T>
class doer
{
public:
void doIt();
}
Run Code Online (Sandbox Code Playgroud)
我想隐藏.cpp文件中的实现(为了更快的编译,也因为它的专有):
doIt.cpp:
template <>
void doer<T>::doIt() { /* how to do it */ }
Run Code Online (Sandbox Code Playgroud)
...并按如下方式使用它:use.cpp:
int main( int, char** )
{
doer<int>::doIt()
}
Run Code Online (Sandbox Code Playgroud)
上面没有链接,因为void doer :: doIt(void)的实现从未在调用它的地方的范围内.
我可以强制将代码生成到doItv2.obj中,如下所示:
doIt_v2.cpp:
template <>
void doer<T>::doIt() { /* how to do it */ }
doer<int> a;
doer<real> b;
Run Code Online (Sandbox Code Playgroud)
但这会导致各种令人头疼的事情(在输入main之前动态内存分配),而我实际上不想创建实例 - 我只想生成模板实例化的目标代码.
有任何想法吗?
| 归档时间: |
|
| 查看次数: |
555 次 |
| 最近记录: |