C++ 我应该如何进行此模板函数的显式实例化以供DLL使用?

C++ 我应该如何进行此模板函数的显式实例化以供DLL使用?,c++,dll,export,instantiation,explicit,C++,Dll,Export,Instantiation,Explicit,我有以下类和模板函数: 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<<'

我有以下类和模板函数:

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';
}
模板
类字符串{
公众:
字符数[num];
};
样板
void getString(字符串和字符串,T编号){

cout如果您希望能够为任意参数实例化函数模板,则不要将其放入源文件中,而是将其放入头文件中

强制性链接:


如果您希望能够为任意参数实例化函数模板,则不要将其放在源文件中,而是放在头文件中

强制性链接:


在标题中声明:

template <size_t num,typename T>
void getString(String<num> & string,T number);
模板
void getString(字符串和字符串,T编号);
在cpp文件中定义:

template <>
void getString<42,int>(String<42,int> & string, int number){
  cout <<string.charArray<<' '<<number<<'\n';
}
模板
void getString(字符串和字符串,整数){

cout在标题中声明:

template <size_t num,typename T>
void getString(String<num> & string,T number);
模板
void getString(字符串和字符串,T编号);
在cpp文件中定义:

template <>
void getString<42,int>(String<42,int> & string, int number){
  cout <<string.charArray<<' '<<number<<'\n';
}
模板
void getString(字符串和字符串,整数){

cout它是什么,从一开始就是一个错误的设计,我所做的根本不是一个显式的实例化,因为即使对于不同的“size\t num”值函数的不同实例的生成与我最初的想法相反,因此这种设计不可能实现我想要的显式实例化。对于正确的设计,函数的第一个参数应该是一个数组,以使“typename T”的不同类型的显式实例化成为可能。正确的设计如下:

template <typename T>
void getString(char string[],T number){
 cout <<string<<' '<<number<<'\n';
}
template __declspec(dllexport) void getString(char string[],unsigned char number);
模板
void getString(字符字符串[],T编号){

cout它是什么,从一开始就是一个错误的设计,我所做的根本不是一个显式的实例化,因为即使对于不同的“size\t num”值函数的不同实例的生成与我最初的想法相反,因此这种设计不可能实现我想要的显式实例化。对于正确的设计,函数的第一个参数应该是一个数组,以使“typename T”的不同类型的显式实例化成为可能。正确的设计如下:

template <typename T>
void getString(char string[],T number){
 cout <<string<<' '<<number<<'\n';
}
template __declspec(dllexport) void getString(char string[],unsigned char number);
模板
void getString(字符字符串[],T编号){


你的问题不是很清楚。你是只想为某些参数实例化模板,还是想为任何参数实例化模板?@Oli Charlesworth_因为我打算为DLL使用实例化,所以我必须为某些类型进行显式实例化。@Pooria:这不一定会发生。这里有“没有什么说明您不能将模板放入DLL的头文件中。@Oli Charlesworth_整个要点是隐藏实现,在这种情况下这似乎是不可能的,否则为什么要隐藏DLL?@Pooria:DLL的目的不是“隐藏实现”,虽然在某些情况下可以使用它。你的问题不是很清楚。你是只想为某些参数实例化模板,还是想为任何参数实例化模板?@Oli Charlesworth_因为我打算对DLL使用实例化,所以我必须对某些类型进行显式实例化。@Pooria:这不一定。没有什么规定你不能在DLL的头文件中放入模板。@Oli Charlesworth\u关键是要隐藏实现,在这种情况下这似乎是不可能的,否则为什么要隐藏DLL?@Pooria:DLL的目的不是“隐藏实现”,虽然在某些情况下可以使用它。整个要点是隐藏实现,在这种情况下,这似乎是不可能的,否则为什么要使用DLL?@Pooria:模板在编译时转换为源代码。如果你“隐藏”如果将模板放在DLL中,那么编译器在编译客户机可执行文件时将无法看到它。\我写下了答案,这要感谢我的这个问题()看一看。_关键是要隐藏实现,这在本例中似乎是不可能的,否则为什么要隐藏DLL?@Pooria:模板在编译时会变成源代码。如果你“隐藏”如果将模板放在DLL中,那么编译器在编译客户端可执行文件时将看不到它。\多亏了我的这个问题,我才写出了答案。@Pooria:因为你需要填写所有模板参数以进行显式实例化,而我不知道是哪个数字您需要。保留未指定的
std::size\t
将需要部分专门化,这对于函数模板是不可用的。@sbi\u多亏了我的这个问题,我才写出了答案()。@Pooria:因为您需要为显式实例化填写所有模板参数,而我不知道是哪个数字您需要。保留未指定的
std::size\t
将需要部分专门化,这对于函数模板是不可用的。@sbi\u多亏了我的这个问题,我才写出了答案()看一看。