c++ - 将 char 绑定(bind)到枚举类型

标签 c++ coding-style enums char

我有一段与此非常相似的代码:

class someclass
{
public:
enum Section{START,MID,END};
vector<Section> Full;
void ex(){
    for(int i=0;i<Full.size();i++)
    {
        switch (Full[i])
        {
        case START :
                  cout<<"S";
                  break;
        case MID :
                  cout<<"M";
                  break;
        case END:
            cout<<"E";
            break;
        }
    }
    }
};

现在假设我有更多的枚举类型并且它们的名称更长...... 好吧,我得到的不是一个非常好看的代码,我想知道是否可以将特定的 char 绑定(bind)到枚举类型,并可能做这样的事情:

for(int i=0;i<Full.size();i++)
    {
        cout<(Full[i]).MyChar();
    }

或任何其他可以使此代码“更漂亮”的方法。 这可能吗?

最佳答案

不幸的是,您无能为力。如果您有权访问 C++11 强类型枚举器功能,那么您可以执行如下操作:

enum class Section : char {
     START = 'S',
     MID = 'M',
     END = 'E',
};

然后你可以这样做:

std::cout << static_cast<char>(Full[i]) << std::endl;

但是,如果您无法使用此功能,那么您无能为力,我的建议是拥有全局 map std::map<Section, char> ,其中涉及每个 enum字符部分,或带有原型(prototype)的辅助函数:

inline char SectionToChar( Section section );

它只是实现了 switch()以更易于访问的方式声明,例如:

inline char SectionToChar( Section section ) {
     switch( section )
     {
     default:
         {
             throw std::invalid_argument( "Invalid Section value" );
             break;
         }
     case START:
         {
             return 'S';
             break;
         }
     case MID:
         {
             return 'M';
             break;
         }
     case END:
         {
             return 'E';
             break;
         }
     }
}

关于c++ - 将 char 绑定(bind)到枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17095639/

相关文章:

c++ - 带有 C++ 的 OpenCV 无法编译

c++ - 这是什么? C++中的运算符呢?

coding-style - LabVIEW中不鼓励使用集群吗?

ios - 有没有更好的方法来确定两个枚举值之间的距离?

php - 如何在 C++ boost 中编写这些正则表达式?

c++ - 我可以创建一个 C++ "zap"函数来处理一个指针,如果它没有分配内存吗?

c# - 如何在 MVVM 中禁用通过 ObjectProvider Enum WPF C# 提供的 ComboBoxItem?

java - @XmlEnum 属性与 JAXB

python - sqlalchemy - 处理几个可选过滤器的优雅方式?

java - 在java中随机选择的对象上调用通用方法的更好方法