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

前端之家收集整理的这篇文章主要介绍了c – 添加成员时如何保持struct的初始化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个这样的问题:

Initializing default values in a struct

我有一个已经有17个boolean的结构,一个clear()方法将它们全部设置为false.这是一个长期的项目该代码仍然可以在现在使用几年后添加到.有没有办法初始化自动扩展的所有成员,所以有人向结构体添加新成员不需要记住将它们添加到clear()方法中(除了一个注释“请不要忘记”),)?

代码库目前不是C11,所以我不认为我可以在声明中进行初始化.

代码是这样的:

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;

解决方法

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

    void clear() {
        *this = EnableFlags();
    }
};

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

这假设您没有定义一个默认构造函数,该构造函数不会将所有标志设置为false.如果您没有用户定义的构造函数,则该假设成立.

由于C 11更简单:

void clear() {
    *this = {};
}

猜你在找的C&C++相关文章