C++ metaprogramming Hellow
2021/8/15 9:05:49
本文主要是介绍C++ metaprogramming Hellow,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
example 1:
1 template<size_t N> 2 struct Fac { 3 enum { 4 value = Fac<N - 1>::value +N, 5 }; 6 }; 7 8 template<> 9 struct Fac<0> { 10 enum { 11 value = 0, 12 }; 13 };
example 2:
1 template<size_t N> 2 struct Fac1 { 3 4 static constexpr size_t value = Fac1<N - 1>::value + N; 5 }; 6 7 template<> 8 struct Fac1<0> { 9 10 static constexpr size_t value = 0; 11 };
example 3:
1 template<size_t N> 2 struct SumUp { 3 enum {value = SumUp<N-1>::value + N}; 4 }; 5 6 template<> 7 struct SumUp<0> { 8 enum { value = 0 }; 9 }; 10 11 template<size_t N> 12 struct Fac { 13 enum { 14 value = Fac<N - 1>::value +N, 15 }; 16 };
The most significant difference (since C++17 avoids the need for an out-of-class definition for the static data member) is that enumerators are instantiated along with the containing class, whereas static data members are instantiated only when needed. (Note, however, that MSVC, at least, doesn’t always properly defer them.)
这其实是因为常量表达式最初只能用enum来声明,但后来(实际上是C++98)允许在类内部初始化static int常量:
这篇关于C++ metaprogramming Hellow的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28pyqt 怎么打包整个项目-icode9专业技术文章分享
- 2024-09-28laravel Commands 创建带有参数的 Artisan 命令的步骤和示例-icode9专业技术文章分享
- 2024-09-28antd怎么实现渲染tiff图片-icode9专业技术文章分享
- 2024-09-28英文半角中划线和中文全角的中划线有什么区别-icode9专业技术文章分享
- 2024-09-28nvm npm 和node 他们之间有什么关系-icode9专业技术文章分享
- 2024-09-28Node Version Manager (nvm)使用教程-icode9专业技术文章分享
- 2024-09-28nvm命令太慢,是什么原因-icode9专业技术文章分享
- 2024-09-28Kotlin 如何增加、删除和修改 MutableStateFlow 中的值。-icode9专业技术文章分享
- 2024-09-28Kotlin的stateFlow.update 写法介绍-icode9专业技术文章分享
- 2024-09-28kotlin 怎么获取当前时间格式-icode9专业技术文章分享