c – 递归模板元编程
发布时间:2020-12-16 03:34:39 所属栏目:百科 来源:网络整理
导读:为了计算阶乘,我可以使用: templateint N struct factorial { enum { value = N * factorialN-1::value }; };template struct factorial1 { 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 使用brew安装sqlite3
- disconf-基于xml分布式配置管理redis
- ruby-on-rails – Rails link_to使用url而不是路径进行对象
- dcloud,hbuilderX开发uni-app第一天踩坑记录
- ruby-on-rails-3 – 使用Carrierwave和Ruby重新创建版本
- ios – 什么是pancake.apple.com?
- iPhone的自定义选项卡栏将选项卡纵向更改为横向
- ruby-on-rails – 如何在Rails中访问原始未更改的http POST
- swift – 如何创建一个全局变量?
- c – 为什么write()返回ssize_t但是接受size_t的参数?