ano*_*non 49 c++ templates instantiation
见标题.我有一个模板.我想强制模板的特定实例进行实例化.我该怎么做呢?
更具体地说,您可以强制抽象模板类进行实例化吗?
我可能会详细说明,因为我有同样的问题.在我的情况下,我正在构建一个库,一些模板实现很大,包含很多东西,但只生成几种类型.我想在库中编译它们并导出所有方法,但不包括带代码的头文件.
即:
template<class T>
OS_EXPORT_DECL class MyTmpl
{
T *item1;
public:
inline T *simpleGetT() { return(item1); } /* small inline code in here */ }
T *doSomeReallyBigMergeStuff(T *b); // note only declaration here
};
// *** implementation source file only seen inside library
template<class T>
MyTmpl<T>::doSomeReallyBigMergeStuff(T *b)
{
... a really big method, but don't want to duplicate it,
so it is a template ...
}
Run Code Online (Sandbox Code Playgroud)
我当然可以引用库中的所有方法来强制它们进行编译和导出,但是不希望向库添加不需要的代码,比如项的参数格式和调用它们的代码等.
????? 具体来说,我正在为多个版本的MSC和GCC以及英特尔编译器构建库.
Geo*_*che 56
您不能强制通用模板进行实例化,编译器只能在类型完全已知的情况下生成代码.
通过明确提供所有类型来强制实例化:
template class std::vector<int>;
Run Code Online (Sandbox Code Playgroud)
Comeaus 模板FAQ详细介绍了相关问题.
Ale*_*tov 46
您还可以尝试的是显式实例化:
template class vector<int>; // class
template int& vector<int>::operator[](int); // member
template int convert<int,double>(double); // function
Run Code Online (Sandbox Code Playgroud)