如何使用自定义值定义类型? (typedef,enum)

时间:2011-12-13 17:10:14

标签: c++ types enums

在我的许多课程中,我使用Color作为类型,它应该只有WHITEBLACK作为可能的值。

所以我想写一下:

Color c; 
  c = BLACK;
  if(c == WHITE) std::cout<<"blah";

和类似的东西。在我的所有类和标题中,我已经说过#include "ColorType.h",我有Color c作为类属性,但我不知道在ColorType.h写什么。我尝试了typedef enum Color的一些变体,但它没有完全解决。

2 个答案:

答案 0 :(得分:5)

enum Colors { Black, White };


int main()
{
    Colors c = Black;

    return 0;
}

答案 1 :(得分:3)

Let_Me_Be's answer是简单/通常的方式,但是C ++ 11还为我们class enums提供了防止错误,如果这些是颜色选项。常规枚举可以让你Colors c = Colors(Black+2);,这是没有意义的

enum class Colors  { Black, White };

您可以(稍微)通过C ++ 03复制此功能,例如:(IDEOne demo

class Colors {
protected:
    int c;
    Colors(int r) : c(r) {}
    void operator&(); //undefined
public:
    Colors(const Colors& r) : c(r.c) {}
    Colors& operator=(const Colors& r) {c=r.c; return *this;}
    bool operator==(const Colors& r) const {return c==r.c;}
    bool operator!=(const Colors& r) const {return c!=r.c;}
    /*  uncomment if it makes sense for your enum.
    bool operator<(const Colors& r) const {return c<r.c;}
    bool operator<=(const Colors& r) const {return c<=r.c;}
    bool operator>(const Colors& r) const {return c>r.c;}
    bool operator>=(const Colors& r) const {return c>=r.c;}
    */
    operator int() const {return c;} //so you can still switch on it

    static Colors Black;
    static Colors White;
};
Colors Colors::Black(0);
Colors Colors::White(1);

int main() {
    Colors mycolor = Colors::Black;
    mycolor = Colors::White;
}