我有一个有enum
成员的类。这些成员需要输出操作员。我知道如何实现运营商如果enum
是类外:enum里面的运算符
enum Type
{
SMALL=1,
MIDDLE=2,
LARGE=3
};
std::ostream& operator<<(std::ostream& out, const Type value){
static std::map<Type, std::string> strings;
if (strings.size() == 0){
#define INSERT_ELEMENT(p) strings[p] = #p
INSERT_ELEMENT(SMALL);
INSERT_ELEMENT(MIDDLE);
INSERT_ELEMENT(LARGE);
#undef INSERT_ELEMENT
}
return out << strings[value];
}
class House
{
public:
Type houseType;
...
};
int main(int argc, char** argv){
House myhouse;
std::cout << "This house is " << myhouse << std::endl;
return 0;
}
是否有可能与enum
类里面做呢?我以类似的方式尝试,但显然失败,因为类内的运算符不允许第二个参数。
谢谢!现在它编译,但不像我预期的那样工作。我在帖子中编辑了输出操作符,以便您可以看到问题。当enum不在课堂上时,代码的输出是,比如说“这所房子很大”。现在,当我把enum放入课堂时,输出是“This house is 3”。你知道这是什么原因吗? – vargss
我无法重现您的行为。也许这与你将'House'传递给'cout'而不是'Type'的事实有关? – user2079303
事实上,复制过程中产生了一个错误。在我的代码中有std :: cout <<“这个房子是”<< myhouse.houseType << std :: endl;但它与输出格式问题无关。 – vargss