是否可以使用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