C/C++教程

C++ metaprogramming Hellow

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!