类中的静态const std::数组
static const std::array in class
我有一个模板结构体,里面有一些枚举,为了方便,我想用其中的枚举创建一个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。
呸,在我用真实答案编辑我的答案的时间里,戴夫得到了它。
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 输入std::数组时出现问题
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- C++如何生成std::数组列表
- 捕获lambda中的std::数组
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- std::数组边界检查如何工作?
- 通过unique_ptr访问std::数组
- 初始化 std::数组 of Eigen::Map
- 传递 std::数组变量作为参数
- 在带有模板的函数中传递未知大小的 std::数组.如何更正此代码?
- 如何将 std::find() 与 2d std: 数组一起使用?
- std::数组派生类聚合初始化
- 在std::数组内部使用时,无法从std::函数构造类
- 使用从1到N的数字初始化std数组模板参数
- 正在声明多维std::数组
- 使用std::index_sequence对std::数组初始化进行包扩展
- 使用 std::type T 的数组来构造可从 T 构造的 std::数组
- 从 std::数组创建十六进制代表
- 使用默认值初始化 std::数组