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

Posted

技术标签:

【中文标题】枚举器而不是类实例化的构造函数?【英文标题】:Enumerator instead of constructor for class instantiation? 【发布时间】:2014-02-25 19:16:13 【问题描述】:

我有一个结构 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】:

您的构造函数允许从Color_typeColor 的隐式转换。如果您不想这样做,则需要将其设为explicit

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

【讨论】:

啊,我在标准中找到了它:“Conversion by constructor”(12.3.1) - 谢谢!

以上是关于枚举器而不是类实例化的构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

C++类构造函数和析构函数详细刨析,高细腻度讲解

C++类构造函数和析构函数详细刨析,高细腻度讲解

C++类构造函数和析构函数详细刨析,高细腻度讲解

通过意图而不是构造函数传递数据

为啥枚举的构造函数不能访问静态字段?

java构造方法和方法的区别