枚举器而不是类实例化的构造函数?
Posted
技术标签:
【中文标题】枚举器而不是类实例化的构造函数?【英文标题】:Enumerator instead of constructor for class instantiation? 【发布时间】:2014-02-25 19:16:13 【问题描述】:我有一个结构 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);
为什么?这是合法的速记吗?
【问题讨论】:
【参考方案1】:您的构造函数允许从Color_type
到Color
的隐式转换。如果您不想这样做,则需要将其设为explicit
:
explicit Color(Color_type cc) :c(Fl_Color(cc))
【讨论】:
啊,我在标准中找到了它:“Conversion by constructor”(12.3.1) - 谢谢!以上是关于枚举器而不是类实例化的构造函数?的主要内容,如果未能解决你的问题,请参考以下文章