加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:48:08 所属栏目:百科 来源:网络整理
导读:我有一个这样的问题: Initializing default values in a struct 我有一个已经有17个boolean的结构,一个clear()方法将它们全部设置为false.这是一个长期的项目该代码仍然可以在现在使用几年后添加到.有没有办法初始化自动扩展的所有成员,所以有人向结构体添
我有一个这样的问题:

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 = {};
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读