我正在尝试实现一个enum class
,其行为与 C ++ 11 (具有类型安全性等)一样,但它也表现为一个真正的类(带有构造函数) ,方法等)。为了做到这一点,我保持内部enum
匿名:这有副作用,为了将m_value
保留为private
成员变量,我不得不添加{{1名为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
?我想保持内部_
匿名,并在必要时以某种方式获取其类型(=仅私有)。
答案 0 :(得分:13)
如何简单地使用其中一个枚举值? e.g:
//...
enum
{
UNKNOWN,
STARTED,
STOPPED
};
private:
using Type = decltype( UNKNOWN );
//...