我有一个带有枚举Color
的结构Color_type
。构造函数的参数类型为Color_type
; Fl_Color
,FL_RED
和FL_BLUE
是来自FLTK的类和常量:
struct Color {
enum Color_type {
red = FL_RED,
blue = FL_BLUE,
// et cetera
};
Color(Color_type cc) :c(Fl_Color(cc)) { }
private:
Fl_Color c;
};
另一种类型有一个成员函数来设置颜色,如下所示:
class Grid {
void set_color(Color col) { lcolor = col; }
private:
Color lcolor;
};
我希望像这样调用这个函数:
my_grid.set_color(Color(Color::red));
即,使用枚举器调用构造函数,就像声明一样。但是,它也是这样的:
my_object.set_color(Color::red);
为什么呢?这是合法的简写吗?
答案 0 :(得分:3)
您的构造函数允许从Color_type
到Color
的隐式转换。如果您不想允许,则需要进行explicit
:
explicit Color(Color_type cc) :c(Fl_Color(cc)) { }