我创建了一个选项结构,旨在通过指定的初始化程序使用:
struct FooOptions {
bool enableReticulation;
};
void Foo(FooOptions&& opts);
Foo(FooOptions{.enableReticulation = true});
不幸的是,因为bool
有一个默认构造函数,所以这样做也是有效的:
Foo(FooOptions{});
但我不想要这个;我希望 Foo 的用户明确决定是否启用网状结构。我可以通过这种方式通过运行时错误来实现这一点:
struct FooOptions {
bool enableReticulation = []() -> bool {
assert(false, "No value provided for enableReticulation");
}();
};
但我更愿意使用编译时错误来执行此操作。有没有办法做到这一点?如有必要,我可以更改bool
为SomeWrapper<bool>
,只要我可以像初始化SomeWrapper<T>
一样进行初始化T
,但没有默认初始化程序。