枚举器而不是类实例化的构造函数?

时间:2014-02-25 19:16:14

标签: c++ constructor enums fltk

我有一个带有枚举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);

为什么呢?这是合法的简写吗?

1 个答案:

答案 0 :(得分:3)

您的构造函数允许从Color_typeColor的隐式转换。如果您不想允许,则需要进行explicit

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