我正在寻找一种方法来在编译时使用值元素填充数组,而不是运行时.所以我正在寻找的是这样的
#define numbar
Bar foo[] = {Bar(0),Bar(1)....Bar(numbar)}
Run Code Online (Sandbox Code Playgroud)
c ++有没有办法做到这一点?也许使用宏或类似的东西?
假设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构造函数.