2014-02-25 46 views
0

我有一个结构Color与枚举Color_type。构造函数有一个类型为Color_type的参数; Fl_ColorFL_REDFL_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); 

为什么?这是合法的速记?

回答

3

您的构造函数允许从Color_typeColor的隐式转换。如果你不想让这一点,你需要使它explicit

explicit Color(Color_type cc) :c(Fl_Color(cc)) { } 
+0

啊,我发现它的标准:“通过构造转换”(12.3.1) - 谢谢! –

相关问题