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

Ala*_*ing 3 c++ static initialization const vector

我想initalize一static const std::vectorFoo{0, 1, 2, 3, ..., n}哪里n是在编译时依据的值称为Lastenum下面.目标是Foo::all包含Fruit枚举的所有值.

foo.h:

enum Fruit { Apple, Orange, Banana, ..., Last };

class Foo {
public:
    static const vector<int> all;
};
Run Code Online (Sandbox Code Playgroud)

foo.cpp:

// initialization of Foo::all goes here.
Run Code Online (Sandbox Code Playgroud)

Jon*_*ely 6

作为第三种选择:

namespace {
  std::vector<int> create();
}
const std::vector<int> Foo::all = create();
Run Code Online (Sandbox Code Playgroud)

并且create()可以做任何它喜欢的事情,甚至可以push_back()用于每个元素,因为vector它创建的不是const.

或者你可以做create()一个constexpr使用功能<index_tuple.h>

#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());
Run Code Online (Sandbox Code Playgroud)