c – Variadic模板之谜

c – Variadic模板之谜,第1张

概述这是可行的代码: template<typename... Args> struct count;template<>struct count<> {static const int value = 0;};template<typename T, typename... Args>struct count<T, Args...> {static const int value 这是可行的代码:

template<typename... Args> struct count;template<>struct count<> {static const int value = 0;};template<typename T,typename... Args>struct count<T,Args...> {static const int value = 1 + count<Args...>::value;};

现在我想知道为什么我们需要部分专门化计数类模板

我们可以这样做:

template< typename... args> struct dd; // edited according to answer but Now getting error redeclared with 2 template parameters which is point below with mark %%template<>struct dd<>{static const int value = 0;};template<typename T,typename... args> //%%struct dd{static const int value= 1+ dd<args...>::value;};

但这不起作用,但为什么呢?

任何帮助非常感谢:)

编辑:根据答案编辑解决方案.

解决方法 使用模板< typename T,typename ... Args>你不能创建省略T的专业化(即dd<>) – 包可以是空的,但T不能.因此,您将模板声明为仅包含一个包的模板,专门用于空包以停止递归,并且部分专用于< T,Args ...>解压缩一种类型并创建一个包含(n – 1)类型的新包.

对于编辑:您不能定义具有不同参数但名称相同的另一个模板,您必须专门化现有的模板.

总结

以上是内存溢出为你收集整理的c – Variadic模板之谜全部内容,希望文章能够帮你解决c – Variadic模板之谜所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1214216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存