【发布时间】:2010-11-09 08:43:38
【问题描述】:
我有以下类和模板函数:
template <size_t num>
class String{
public:
char charArray[num];
};
template <size_t num,typename T>
void getString(String<num> & string,T number){
cout <<string.charArray<<' '<<number<<'\n';
}
然后我尝试执行如下显式实例化以将该实例化导出到 DLL,但最后发现它根本没有被实例化,因为我在我的地方得到了链接器未解析的外部符号的链接器错误即将导入并使用该函数(确切的链接器错误:“未解析的外部符号”__declspec(dllimport)
void _cdecl getString(class String &,unsigned char) (_imp_??$getString@$04@@YAXAAV?$String@$04@@E@Z)") 因为在我打算实例化的点上没有指定“num”;首先我想可能是因为String<num> & string 将被实现为指针,所以下面的语法将是一个实例化,但似乎我错了。
template<size_t num>
__declspec(dllexport) void getString(String<num> & string,unsigned char number);
现在你建议我应该如何进行实例化,因为我肯定不会为地球上找到的每一个整数都这样做!!!。
【问题讨论】:
-
你的问题不是很清楚。您只想为某些参数实例化模板,还是希望能够为 any 参数实例化它?
-
@Oli Charlesworth_As 我打算使用 DLL 的实例化,我必须对某些类型进行显式实例化。
-
@Pooria:不一定是这样。没有任何内容表明您不能将模板放入 DLL 的头文件中。
-
@Oli Charlesworth_关键是要隐藏在这种情况下似乎不可能的实现,否则为什么要使用 DLL?
-
@Pooria:DLL 的目的不是“隐藏实现”,尽管在某些情况下它可以用来做到这一点。
标签: c++ dll export instantiation explicit