【问题标题】:C++ Convert pre-existing enums to string [duplicate]C ++将预先存在的枚举转换为字符串[重复]
【发布时间】:2013-06-13 14:44:34
【问题描述】:

参考https://stackoverflow.com/a/5094430/391104

//typedef enum {Unknown = -1 Linux=7, Apple=2, Windows=100} OS_type;
DEFINE_ENUM_WITH_STRING_CONVERSIONS(OS_type, (Linux)(Apple)(Windows))

int main()
{
    OS_type t = Windows;
    std::cout << ToString(t) << " " << ToString(Apple) << std::endl;
}

我遇到的问题是:

1> OS_type 是在库中定义的,我无权更改它。

2>另外,枚举的值是自定义的!

我该怎么办?

【问题讨论】:

  • 只需使用switch 选择字符串,正如您链接到的答案中所示...
  • 在这种情况下,您需要手动创建枚举值的字符串表示或向库维护者提交报告并要求他们提供枚举字符串表示
  • 修改DEFINE_ENUM_WITH_STRING_CONVERSIONS,使其实际上不定义枚举,但仍定义字符串转换。
  • @n.m,你能告诉我怎么做吗?
  • 我可以,但这有什么好玩的?

标签: c++


【解决方案1】:

只需为流输出运算符提供重载:

std::ostream& operator <<(std::ostream& dst, const OS_type& ostype)
{
    switch (ostype) {
        case Unknown: dst << "Unknown"; break;
        case Linux:   dst << "Linux"; break;
        case Apple:   dst << "Apple"; break;
        case Windows: dst << "Windows"; break;
        default:      dst << "invalid";
    }
    return dst;
}

您现在可以这样做:

int main()
{
    OS_type ostype = Apple;
    std::cout << ostype << '\n';
}

【讨论】:

  • 我们在第三方库中定义了许多枚举,一次做一个是一个痛苦的过程。
猜你喜欢
  • 2012-12-07
  • 2019-02-21
  • 2015-06-10
  • 2017-05-01
  • 2010-09-06
  • 2015-11-09
  • 1970-01-01
相关资源
最近更新 更多