在C++中重载枚举类型的输出运算符

3

能否在枚举内部重载输出运算符?如果我使用类,就不会出现各种错误:

   ../src/oop.cpp:18:2: error: expected identifier before 'friend'
    ../src/oop.cpp:18:2: error: expected '}' before 'friend'
    ../src/oop.cpp:18:2: error: 'friend' used outside of class
    ../src/oop.cpp:18:16: error: expected initializer before '&' token
    ../src/oop.cpp:22:1: error: expected declaration before '}' token

我希望您能够实现类似以下Java代码的功能:
```java ``` 请注意,本文中保留了HTML标签。
public enum Type { 

  ACOUSTIC, ELECTRIC;

  public String toString() {
    switch(this) {
      case ACOUSTIC: return "acoustic";
      case ELECTRIC: return "electric";
      default:       return "unspecified";
    }
  }
}

谢谢。 编辑:
enum Type {
    //ACOUSTIC, ELECTRIC;
    inline std::ostream& operator << (std::ostream& os, Type t) // error here
    {

    }
};

你是在讨论 .net 还是本地的 c++?(顺便说一下,你的默认语句应该最好抛出一个异常!) - Philipp
我指的是本地的C++,是的。 - Adrian
1个回答

5
enum MyEnum {
  foo, bar
};

inline std::ostream & operator<<(std::ostream & Str, MyEnum V) {
  switch (V) {
  case foo: return Str << "foo";
  case bar: return Str << "bar";
  default: return Str << (int) V;
}

@vBx:请查看更新后的答案——你需要将运算符放在枚举类型之外。 - Erik
哦,那应该很明显 :) 谢谢,现在它可以工作了。 - Adrian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接