8
我试图实现一个enum class
,其行为与引入的行为类似于具有类型安全等等的,但它也表现为一个真实的类(带有构造函数,方法等)。为了做到这一点,我不停的内部enum
匿名:这有副作用,就是为了保持m_value
作为private
成员变量,我不得不添加一个名为_
一个static
成员变量,你可以看到如下:如何在C++中实现一个真正的枚举类
#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
匿名,并以某种方式在需要时(=仅私人)获取其类型。
另见:https://stackoverflow.com/questions/28828957/enum-to-string-in-modern-c11-c14-and-future-c17-c20 – Alex
你有没有考虑过使用免费功能呢? – Yakk