大佬教程收集整理的这篇文章主要介绍了c – 具有可变参数的外部模板无法编译,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
extern template<typename... XS> void log( Xs... xs );
error: expected unqualified-id before ‘<’ token
我检查了c 11中的gcc状态,extern模板应该可以工作,不是吗?
extern关键字应用于模板的显式实例化,并且它可以防止编译器在处理某个转换单元时隐式生成该模板的代码.根据C 11标准的第14.7.2 / 2段:
如果没有extern关键字,编译器将在每个包含对log(double,int)调用的转换单元中生成(例如)log(double,int)的代码,并且此代码 – 对于所有翻译单元应该和应该是相同的 – 最终将由链接器合并(链接器基本上会丢弃所有重复项并且只保留一个).
通过告诉编译器,extern关键字可以避免编译时间浪费:“相信我,别人会在其他地方实例化这个模板 – 你现在不需要这样做”.但必须履行这一承诺.
例如,如果您有这个主要模板:
template<typename... Xs> void log(Xs... xs);
并声明这个显式实例化:
extern template void log(int,doublE);
template void log(int,doublE)
以上是大佬教程为你收集整理的c – 具有可变参数的外部模板无法编译全部内容,希望文章能够帮你解决c – 具有可变参数的外部模板无法编译所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。