我有一个包含许多相同类型成员的结构,就像这样
struct VariablePointers {
VariablePtr active;
VariablePtr wasactive;
VariablePtr filename;
};
问题是,如果我忘记初始化结构成员之一(例如
wasactive
),如下所示:VariablePointers{activePtr, filename}
编译器不会提示它,但我会有一个部分初始化的对象。我怎样才能防止这种错误?我可以添加一个构造函数,但它会重复两次变量列表,所以我必须输入所有这些三次!
也请加 C++11 答案,如果有 C++11 的解决方案(目前我仅限于该版本)。不过,也欢迎使用最新的语言标准!
最佳答案
如果缺少所需的初始化程序,这是一个触发链接器错误的技巧:
struct init_required_t {
template <class T>
operator T() const; // Left undefined
} static const init_required;
用法:
struct Foo {
int bar = init_required;
};
int main() {
Foo f;
}
结果:
/tmp/ccxwN7Pn.o: In function `Foo::Foo()':
prog.cc:(.text._ZN3FooC2Ev[_ZN3FooC5Ev]+0x12): undefined reference to `init_required_t::operator int<int>() const'
collect2: error: ld returned 1 exit status
注意事项:
Foo
根本就不是一个集合体。 关于c++ - 是否可以防止遗漏聚合初始化成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60150749/