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模板之谜所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)