我如何显式实例化模板函数?

我有一个参数的模板函数。 我必须实例化该函数,而不必调用该函数意味着我必须实例化。

我有这个function:

template <class T> int function_name(T a) {} 

我像这样实例化了这个函数:

 template int function_name<int>(int); 

但是我得到了以下错误:

 error: expected primary-expression before 'template' error: expected `;' before 'template' 

[编辑2]:请注意,由于代码格式问题,原始问题中的代码存在一些混淆。 请参阅AnthonyHatchkins的答案以获取更多详细信息。

如果你真的想实例化(而不是专门化或者其他)的function,请执行以下操作:

 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 <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是一个模板参数。