是否可以使用C++ 11 initializer_list
组装一递归定义类如Foo
,下面,使用constexpr
构造:使用C++ 11 initializer_list用递归定义的类型使用constexpr
template <size_t N>
struct Foo {
constexpr Foo(int x, Foo<N-1> f) : x(x), xs(xs) {}
int x;
Foo<N-1> xs;
};
template <> struct Foo<0> {};
我可以初始化一个Foo<3>
使用:
int main(int argc, char *argv[])
{
Foo<3> a = Foo<3>(1,Foo<2>(2,Foo<1>(3,Foo<0>())));
return 0;
}
这将是很好使用的Foo < 3> A = {1,2,3}代替。如果initializer_list
中有constexpr tail
函数,我认为它应该起作用。
是的,可以使用该类的'initializer_list'编写一个构造函数。不相关:如果你专门用'Foo <1>'而不是零,这个班会更小。 – 2012-03-13 00:03:53
为什么班级模板会变小? – user2023370 2012-03-13 21:26:37
除特殊情况(其中您的不符合条件),所有类都至少有1个字节。所以'Foo'将总是有一个字节,即'Foo <0>'。 – 2012-03-13 21:40:35