1

参考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> 另外,枚举的值是自定义的!

我应该怎么办?

4

1 回答 1

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';
}
于 2013-06-13T15:22:06.053 回答