下面的长显式初始化列表是否可以被生成它的某个模板替换?
- 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);