C ++动态初始化const静态向量

时间:2012-12-31 19:41:38

标签: c++ vector static initialization const

我想在课程static const std::vector Foo{0, 1, 2, 3, ..., n}初始化n,其中Last在编译时根据enum的值在{ Foo::all以下{。}}目标是Fruit包含foo.h枚举的所有值。

enum Fruit { Apple, Orange, Banana, ..., Last }; class Foo { public: static const vector<int> all; };

foo.cpp

// initialization of Foo::all goes here.

{{1}}

3 个答案:

答案 0 :(得分:6)

作为第三种选择:

namespace {
  std::vector<int> create();
}
const std::vector<int> Foo::all = create();

create()可以做任何喜欢的事情,即使每个元素都使用push_back(),因为它创建的vector不是const。

或者您可以使用<index_tuple.h>

使create()成为constexpr函数
#include <redi/index_tuple.h>

namespace {
  template<unsigned... I>
    constexpr std::initializer_list<int>
    create(redi::index_tuple<I...>)
    {
      return { I... };
    }
}

const std::vector<int> Foo::all = create(typename redi::make_index_tuple<Last>::type());

答案 1 :(得分:4)

您可以使用boost::irange

auto range = boost::irange(0, n + 1);
const vector<int> Foo::numbers(range.begin(), range.end());

答案 2 :(得分:2)

如果您的n足够小并且您使用的是支持c++0xc++11的编译器,请将其拼写出来

const std::vector<int> Foo::all{0, 1, 2, 3, ..., n};

根据@ Jonathan的解释修正。