【发布时间】:2017-09-01 17:39:50
【问题描述】:
我正在尝试实现一个enum class,它的行为类似于 C++11 引入的那个(具有类型安全等),但它也表现为一个真正的类(具有构造函数、方法, ETC。)。为了做到这一点,我保留了内部 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 匿名,并在需要时以某种方式获取其类型(= 仅私下)。
【问题讨论】:
-
您是否考虑过只使用免费功能?