c – 递归模板元编程

c – 递归模板元编程,第1张

概述为了计算阶乘,我可以使用: template<int N> struct factorial { enum { value = N * factorial<N-1>::value }; };template<> struct factorial<1> { enum { value = 1 }; }; //base Case 然后可以像下面一样使用它 X =&阶乘LT 8是氢; ::值; 那么, 为了计算阶乘,我可以使用:
template<int N> struct factorial { enum { value = N * factorial<N-1>::value }; };template<> struct factorial<1> { enum { value = 1 }; }; //base Case

然后可以像下面一样使用它

X =&阶乘LT 8是氢; ::值;

那么,是否有可能获得类似的递归模板

unsigned Log2(unsigned n,unsigned p = 0) {    return (n <= 1) ? p : Log2(n / 2,p + 1);}

我能想到这个:

template<int N,unsigned int P=0> struct Log2     { enum { value = Log2<N/2,P+1>::value }; };

但不知道如何设置基础案例.

template<> struct Log2<0,???> { enum { value = ???? }; };

有任何想法吗 ?

解决方法 你可以使用部分专业化
template <unsigned p>struct Log2<0,p> { enum { value = p }; };template <unsigned p>struct Log2<1,p> { enum { value = p }; };

在C 11中,您可以将函数转换为constexpr,而不是创建模板.

constexpr unsigned Log2(unsigned n,p + 1);}std::array<int,Log2(256)> x {{1,2,3,4,5,6,7,8}};//              ^^^^^^^^^ Just a compile-time function call.
总结

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

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

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

原文地址:https://www.54852.com/langs/1256802.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存