如何在C 中实现真正的枚举类
How to implement a real enum class in C++
我正在尝试实现一个像 c 11 (具有类型安全等)引入的 enum class
类(带有构造函数,方法等)。为此,我保留了内部enum
匿名:它具有将m_value
作为private
成员变量的副作用,我必须添加一个名为_
的static
成员变量,如下所示:
#include <iostream>
#include <experimental/string_view>
class State
{
public:
static enum
{
UNKNOWN,
STARTED,
STOPPED
} _;
private:
using Type = decltype( _ );
Type m_value;
public:
constexpr State( Type value = UNKNOWN )
: m_value( value )
{ }
constexpr bool operator==( Type value ) const
{
return m_value == value;
}
constexpr std::experimental::string_view to_string( ) const
{
switch ( m_value )
{
case UNKNOWN: return "UNKNOWN";
case STARTED: return "STARTED";
case STOPPED: return "STOPPED";
}
return "";
}
};
State::Type State::_;
int main( )
{
State state;
std::cout << state.to_string( ) << std::endl;
state = State::STARTED;
std::cout << state.to_string( ) << std::endl;
if( state == State::STOPPED )
{
std::cout << state.to_string( ) << std::endl;
}
return 0;
}
有没有办法摆脱无用的static
成员变量_
?我想保持内部enum
匿名,并在需要时以某种方式获取其类型(仅私有)。
简单地使用枚举值之一?例如:
//...
enum
{
UNKNOWN,
STARTED,
STOPPED
};
private:
using Type = decltype( UNKNOWN );
//...
[live demo]
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- 具有特定于枚举的实现和共享功能 (CRTP) 的类模板
- 如何在V8中为C 本机对象实现属性枚举器
- 如何在C 中实现真正的枚举类
- 强类型枚举的语法实现错误
- 枚举在内部作为整数实现.那为什么会给出错误
- 如何实现像Qt::LeftDockWidgetArea这样的枚举名称
- 在C++中实现枚举类型
- 如何在C++中实现枚举
- 实现同时具有枚举和类行为的东西
- 如何实现枚举值到类模板的隐式转换
- 不确定如何在头文件中实现可访问的枚举
- 枚举是实现位标志的规范方式吗?
- c++枚举的类实现
- 如何使用嵌套枚举实现代码重用
- 枚举成员类型仍然依赖于实现