如何在添加成员时保持struct的初始化?

Pau*_*ton 9 c++ c++03

我有一个问题,有点跟进:

初始化结构中的默认值

我有一个已经有17个bool的结构,以及一个clear()将它们全部设置为的方法false.这是一个长期项目; 从现在开始,代码仍然可以使用并添加到.有没有办法初始化将自动扩展的所有成员,以便有人向结构中添加新成员不需要记住将它们添加到clear()方法中(除了评论说"请不要忘记")?

这个代码库目前不是C++ 11,所以我认为我不能在声明中进行初始化.

代码是这样的:

typedef struct {
    bool doThingA;
    bool doThingB;
    bool doThingC;
    bool doThingD;
    // etc for several more bools

    void clear() {
        doThingA = false;
        doThingB = false;
        doThingC = false;
        doThingD = false;
        // etc...
    }
} EnableFlags;
Run Code Online (Sandbox Code Playgroud)

Jon*_*ely 9

struct EnableFlags {
    bool doThingA;
    bool doThingB;
    bool doThingC;
    bool doThingD;
    // etc for several more bools

    void clear() {
        *this = EnableFlags();
    }
};
Run Code Online (Sandbox Code Playgroud)

这将创建一个临时的所有成员设置为零,然后*this复制它.所以它将所有成员设置为零,无论有多少成员.

这假定您没有定义一个默认构造函数,该构造函数执行除将所有标志设置为false之外的其他操作.如果您没有用户定义的构造函数,则该假设成立.

从C++ 11开始,它甚至更简单:

void clear() {
    *this = {};
}
Run Code Online (Sandbox Code Playgroud)

  • `*this = {};`是危险的,好像该类有一个带有`int`的赋值运算符,那么它优先于复制赋值运算符.[见这里的完整示例](http://stackoverflow.com/questions/33511641/overload-resolution-assignment-of-empty-braces) (2认同)