gpt4 book ai didi

c++ - 如何在 C++ 中实现一个真正的枚举类

转载 作者:可可西里 更新时间:2023-11-01 17:34:31 25 4
gpt4 key购买 nike

我正在尝试实现一个 enum 类,它的行为类似于 C++11 中引入的类(具有类型安全等),但它的行为也像一个真实的类(带有构造函数、方法等)。为了这样做,我保持内部 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++ - 如何在 C++ 中实现一个真正的枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46005438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com