关于c ++:返回枚举而不是索引

Return the enumeration instead of the index

本问题已经有最佳答案,请猛点这里访问。

我有一个简单的类,它使用枚举来表示"状态"。当我使用getStatus成员函数时,它确实返回"busy",但当我打印该值时,它显示"1"。如何打印"忙"而不是1?

http://codepad.org/9ndlxyu演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;

enum Status{Idle, Busy};
class text
{
public:
    void SetStatus(Status s);
    Status getStatus();
private:
    Status s;      
};
void text::SetStatus(Status s)
{
    this->s = s;
}
Status text::getStatus()
{
    return this->s;
}

int main()
{
    text myText;
    myText.SetStatus(Busy);
    cout << myText.getStatus() << endl; //outputs 1, should output"Busy"
}


这里有一个完全有效的编辑:http://ideone.com/wfo4g

添加:

1
2
3
4
5
6
7
8
9
10
11
std::ostream& operator<<(std::ostream& os, const Status status)
{
    switch (status)
    {
        case Idle: return os <<"Idle";
        case Busy: return os <<"Busy";
        default:   return os <<"Status:" << status;
    }

    return os <<"<error>";
}

你不能不做进一步的工作。Busy只是一个在编译时为您方便而存在的标识符。在编译期间,编译器用实际值1替换所有发生的事件。

为了让它按您的需要工作,您需要一个额外的数组或从枚举值到描述枚举标识符的字符串的映射。