У меня возникли проблемы с использованием конструкторов Struct
ниже. В частности, те, которые имеют параметр типа Color_type
.Что такое намерение конструктора Параметры типа внутреннего enum ?: код из принципов и практики программирования с использованием C++
Это мое понимание того, что с enum
Color_type
определяется в struct
Color
обеспечивая то, казалось бы, что может быть доступна как Color::Color_type::red
, но это не работает, когда я называю конструктор с таким значением, например, Color p{Color::Color_type::red};
Я смущен насчет намерения иметь этот enum
в пределах struct
и предоставить конструкторы с параметрами этого типа. Как бы построить этот объект для доступа к этим определениям типов?
бы лучшим решением будет использовать контекстными enum class
за пределами struct
, который называется так же, таким образом, что она предоставляет средства для вызова конструктора, как Color p{Color::Color_type::red};
Те же вопросы распространяться на enum Transparency
, а также.
Это Snippit библиотеки grapics предоставленной Бьярне Страуструп в своей книге, Принципы программирования и практики с использованием C++ 2e
struct Color {
enum Color_type {
red=FL_RED, blue=FL_BLUE, green=FL_GREEN,
yellow=FL_YELLOW, white=FL_WHITE, black=FL_BLACK,
magenta=FL_MAGENTA, cyan=FL_CYAN, dark_red=FL_DARK_RED,
dark_green=FL_DARK_GREEN, dark_yellow=FL_DARK_YELLOW, dark_blue=FL_DARK_BLUE,
dark_magenta=FL_DARK_MAGENTA, dark_cyan=FL_DARK_CYAN
};
enum Transparency { invisible = 0, visible=255 };
Color(Color_type cc) :c(Fl_Color(cc)), v(visible) { }
Color(Color_type cc, Transparency vv) :c(Fl_Color(cc)), v(vv) { }
Color(int cc) :c(Fl_Color(cc)), v(visible) { }
Color(Transparency vv) :c(Fl_Color()), v(vv) { }
int as_int() const { return c; }
char visibility() const { return v; }
void set_visibility(Transparency vv) { v=vv; }
private:
unsigned char v; // 0 or 1 for now
Fl_Color c;
};
Вы можете использовать 'Color :: red' вместо' Color :: Color_type :: red'. –