如何重载<<作为类成员的枚举的运算符。具体来说,我有以下代码:
#include <iostream>
using namespace std;
namespace foo {
class bar {
public:
enum a { b, c, d};
static void print() {
cout << b << endl;
}
};
ostream& operator<< (ostream& os, bar::a var) {
switch (var) {
case bar::b:
return os << "b";
case bar::c:
return os << "c";
case bar::d:
return os << "d";
}
return os;
}
}
int main() {
foo::bar::print();
return 0;
}
如何让打印功能打印“b”而不是“1”?
答案 0 :(得分:2)
这是一个简单的解决方案:
#include <iostream>
using namespace std;
namespace foo {
class bar {
public:
enum a { b, c, d};
static void print();
};
ostream& operator<< (ostream& os, bar::a var) {
switch (var) {
case bar::b:
return os << "b";
case bar::c:
return os << "c";
case bar::d:
return os << "d";
}
return os;
}
void bar::print() {
cout << b << endl;
}
}
int main() {
foo::bar::print();
return 0;
}
[编辑]正如aschepler之前所述,您只需要确保在operator<<(ostream &, bar::a)
定义之前bar::print
可见。
答案 1 :(得分:1)
class bar {
public:
enum a { b = 'b', c = 'c', d = 'd' };
static void print() {
cout << char(b) << endl;
}
};
答案 2 :(得分:0)
问题是,在宣布您的cout << bar::
重载之前,您使用ostream<< bar::
来,因此它不会调用您的重载。向下移动定义。
class bar {
public:
enum a { b, c, d };
static void print();
};
ostream& operator<< (ostream& os, bar::a var) {
...
void bar::print()
{
cout << b << endl;
}
编辑:我在打字时看到其他一些帖子。