为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
MM们 2019-10-08 11:08:02
我有一个带有一个参数的模板函数。我必须实例化该函数而不调用该函数,这意味着我必须实例化。我有这个功能:template <class T> int function_name(T a) {}我实例化了这样的功能:template int function_name<int>(int);但是我遇到了以下错误:error: expected primary-expression before 'template'error: expected `;' before 'template'
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

请注意,由于代码格式问题,原始问题中的代码有些混乱。有关更多详细信息,请参见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

注意模板后的尖括号!


查看完整回答
反对 回复 2019-10-08
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

您的代码是正确的。


错误消息与您在此处未引用的代码中的位置有关。


更新:


原代码为


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


查看完整回答
反对 回复 2019-10-08
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

原始代码看起来像那样。但是由于推导了模板参数,它仍然有效。我必须同意安东尼·哈奇金斯(Antony Hatchkins)的观点,该错误是由OP未引用的代码引起的,但是我认为您的答案对于不了解显式实例化的人还是有用的

查看完整回答
反对 回复 2019-10-08
  • 3 回答
  • 0 关注
  • 624 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信