C ++将预先存在的枚举转换为字符串

时间:2013-06-13 14:44:34

标签: c++

请参阅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&GT; OS_type在库中定义,我无权更改它。

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

我该怎么办?

1 个答案:

答案 0 :(得分:0)

只为流输出操作符提供重载:

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';
}