Как определить тип с пользовательскими значениями?(typedef, enum) - PullRequest
0 голосов
/ 13 декабря 2011

В моей программе во многих классах я использую Color как тип, и он должен иметь только WHITE и BLACK в качестве возможных значений.

Так, например, я хочу написать:

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

и подобные вещи.Во всех моих классах и заголовках я сказал #include "ColorType.h", и у меня есть Color c в качестве атрибутов класса, но я не знаю, что написать в этом ColorType.h.Я попробовал некоторые варианты typedef enum Color, но это не совсем сработало.

Ответы [ 2 ]

5 голосов
/ 13 декабря 2011
enum Colors { Black, White };


int main()
{
    Colors c = Black;

    return 0;
}
3 голосов
/ 13 декабря 2011

Ответ Let_Me_Be - это простой / обычный способ, но 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...