class中的static const std :: array

shu*_*e87 1 c++ templates c++11

我有一个带有一些枚举的模板化结构,为了方便起见,我想创建一个带有枚举的std :: array.有没有办法做到以下几点?

template< typename A >
struct someClass{
    enum class State{
        sA,
        sB,
        sC
    }

    static const std::array<State,4> the_states = {{
        State::sA,
        State::sB,
        State::sC
    }};

};
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 5

不可以.只能在类中初始化静态const积分数据成员.

但是,你可以这样做......

template< typename A >
struct someClass
{
    enum State
    {
        sA,
        sB,
        sC
    };

    static const std::array<const State,4> the_states;
};

template<typename A>
const std::array<const someClass::State,4> someClass<A>::the_states = 
{
    someClass::State::sA, 
    someClass::State::sB, 
    someClass::State::sC 
};
Run Code Online (Sandbox Code Playgroud)

  • C++ 11(显然在这里有效)允许这样做. (2认同)