C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 变体模板,参数包及其在参数列表中的歧义大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在这个问题中,我将参 my previous question.

在这个问题上,我发现以下内容无效:

template<typename T,typename... A,typename S>
class C { };

是因为:

当然,这是有道理的.

然后,作为替代方法,提出了以下涉及专业化的方法

template<typename F,typename S>
class c;

template<typename T,typename S>
class C<T(A...),S> { };

实际上,这似乎是有效的,所以感谢提出它的那个.

无论如何,我不明白为什么这是有效的代码,而前一个没有.
如果以前的解决方案同样含糊不清呢?编译器为什么和如何解决这种歧义?
根据以前的问题(见这个问题开始的链接),在我看来,仍然是可变的部分应该扼杀任何参数到最后,因此这个代码也不应该是有效的.
我当然错了,但我的推理究竟是怎么了?

解决方法

在类模板中,预期模板参数列表C a,b,c,d,e,f>需要匹配
template<typename T,typename S>

其中… A只是浮动在参数列表中.

但在专业化中,需要匹配的不是模板列表,而是模式:

C<T(A...),S>

这是容易的,因为A …被分隔.

因此,在模板专业化中,参数列表只是一个符号的清单,一些标量和一些参数包,将以模式显示.

大佬总结

以上是大佬教程为你收集整理的c – 变体模板,参数包及其在参数列表中的歧义全部内容,希望文章能够帮你解决c – 变体模板,参数包及其在参数列表中的歧义所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。