下面的长显式初始化列表是否可以被生成它的某个模板替换?
std::array<Foo,n_foos> foos = {{ {0,bar},{1,{2,{3,{4,{5,{6,{7,}};
现在这里这段代码的工作原理只是因为我们有constexpr int n_foos = 8.如何对任意和大的n_foos进行此操作?
解决方法
以下解决方案使用C 14 std :: index_sequence和std :: make_index_sequence(其中
can be easily implemented in C++11 program):
template <std::size_t... indices> constexpr std::array<Foo,sizeof...(indices)> CreateArrayOfFoo(const Bar& bar,std::index_sequence<indices...>) { return {{{indices,bar}...}}; } template <std::size_t N> constexpr std::array<Foo,N> CreateArrayOfFoo(const Bar& bar) { return CreateArrayOfFoo(bar,std::make_index_sequence<N>()); } // ... constexpr std::size_t n_foos = 8; constexpr auto foos = CreateArrayOfFoo<n_foos>(bar);