Answers:
[编辑2]:请注意,由于代码格式问题,原始问题中的代码有些混乱。有关更多详细信息,请参见AnthonyHatchkins的答案。
如果您真的想实例化(而不是专门化)功能,请执行以下操作:
template <typename T> void func(T param) {} // definition
template void func<int>(int param); // explicit instantiation.
[编辑]在显式实例化和专门化方面似乎(很多)混乱。我上面发布的代码涉及显式实例化。专业化的语法不同。这是专门化的语法:
template <typename T> void func(T param) {} // definition
template <> void func<int>(int param) {} // specialization
注意模板后的尖括号!
template<>
形式。他所写的与专业不同。+1教我这个新事物。我要删除我的帖子。:D
您的代码是正确的。
错误消息与您在此处未引用的代码中的位置有关。
更新:
原代码为
template <class T> int function_name(T a) {}
template int function_name<int>(int);
这是正确的。
但是它没有被引用,因此看起来像这样:
template int function_name(T a) {}
template int function_name(int);
它产生以下错误
a.cpp:1: error: explicit instantiation of non-template ‘int function_name’
a.cpp:1: error: expected `;' before ‘(’ token
a.cpp:3: error: ‘function_name’ is not a template function
这与OP所引用的明显不同。
在此变体中,第二行没问题(<int>
此处可以省略),但是第一行有故障。编译器无法猜测这T
是模板参数。
template int function_name( T a) { }
和template int function_name(int);