类内部枚举的运算符

var*_*gss 2 c++ enums

我有一个有enum成员的班级.这些成员需要输出操作员.我知道如果enum在类之外如何实现operator :

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;   
}
Run Code Online (Sandbox Code Playgroud)

enum在课堂上可以做到吗?我以类似的方式尝试过,但它显然失败了,因为类内的运算符不允许第二个参数.

eer*_*ika 5

是否有可能在课堂上使用枚举?

是的,它以完全相同的方式工作.您只需使用范围解析运算符,因为在这种情况下,枚举不再位于全局范围内:

std::ostream& operator<<(std::ostream& out, const House::Type value)
Run Code Online (Sandbox Code Playgroud)