类中的静态const std::数组

static const std::array in class

本文关键字:std 数组 const 静态      更新时间:2023-10-16

我有一个模板结构体,里面有一些枚举,为了方便,我想用其中的枚举创建一个std::数组。有没有办法做到以下几点?

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
    }};
};

No。只能在类中初始化静态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 
};
#include <iostream>
#include <array>
template< typename A >
struct someClass{
    enum class State {
        sA,
        sB,
        sC
    };
    static const std::array<State,3> the_states;    
};
template<typename A>
const std::array<typename someClass<A>::State,3> someClass<A>::the_states = {
    someClass<A>::State::sA,
    someClass<A>::State::sB,
    someClass<A>::State::sC
};
int main() {
    for( auto i : someClass<int>::the_states) {
        switch(i) {
            case someClass<int>::State::sA:
                std::cout << "sA" << std::endl;
                break;
            case someClass<int>::State::sB:
                std::cout << "sB" << std::endl;
                break;
            case someClass<int>::State::sC:
                std::cout << "sC" << std::endl;
                break;
        }
    }
}

注意,不能像处理4元素数组那样以0结束列表,因为0不能转换为枚举类State。

呸,在我用真实答案编辑我的答案的时间里,戴夫得到了它。