c ++以巧妙的方式使用预定义的值填充数组

Thi*_*ser 0 c++ arrays

我正在寻找一种方法来在编译时使用值元素填充数组,而不是运行时.所以我正在寻找的是这样的

#define numbar
Bar foo[] = {Bar(0),Bar(1)....Bar(numbar)}
Run Code Online (Sandbox Code Playgroud)

c ++有没有办法做到这一点?也许使用宏或类似的东西?

Ger*_*ago 5

假设c ++ 14:

constexpr auto num_bars = 100;

class Bar {
    constexpr Bar(int i);
};

template <std::size_t ...I>
constexpr auto generate_bars_impl(std::index_sequence<I...>) {
    return {Bar(I)...};
}

template <std::size_t N, typename Indices = std::make_index_sequence<N>>
constexpr auto generate_bars() {
   return generate_bars_impl(Indices());
}

constexpr auto generated = generate_bars<num_bars>();
Run Code Online (Sandbox Code Playgroud)

这将为您提供C++ 14中的std :: initializer_list.C++ 11:你应该实现index_sequence,我认为initializer_list没有constexpr构造函数.