我有一个问题,有点跟进:
我有一个已经有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)
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)
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |