【发布时间】:2011-10-21 17:47:04
【问题描述】:
我正在做一个项目,我们有一个像这样的标准枚举:
enum Services {
RequestShower = 611,
RequestBath = 617,
RequestShave = 612,
RequestHaircut = 618
};
但我的老板说最新的 C++ 标准不认为枚举等同于 int,所以建议使用一个有点像这样的类:
class VatelPrivateService {
public:
static const short
RequestShower = 611,
RequestBath = 617,
RequestShave = 612,
RequestHaircut = 618;
static const char* getName(int val);
};
ostream operator<<(ostream& os, VatelPrivateService& service);
好吧,我尝试这样实现:
const char* VatelPrivateService::getName(int id)
{
#define CASE_NM(rq) case rq: return #rq
switch(id)
{
CASE_NM(RequestShower);
CASE_NM(RequestBath);
CASE_NM(RequestShave);
CASE_NM(RequestHaircut);
}
#undef CASE_NM
return "";
}
ostream& operator<<(ostream& os, const VatelPrivateService& service)
{
os << VatelPrivateService::getName(service);
return os;
}
然后这样称呼它:
cout << "item: " << VatelPrivateService::RequestShower << endl;
但上面的代码无法编译 - 获取: 错误 C2664:“VatelPrivateService::getName”:无法将参数 1 从“const VatelPrivateService”转换为“int”
希望你能看到我的意图。我该如何解决这个问题?
安格斯
【问题讨论】:
标签: c++