Я создал структуру параметров, предназначенную для использования через назначенный инициализатор:
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
, но без инициализатора по умолчанию.
SomeWrapper<T>
можно было построить всеми способами, которыми можно построитьT
, кроме построения по умолчанию. Для простых типов, таких какbool
, это легко, но если у меня естьSomeWrapper<std::vector<int>>
, я хочу иметь возможность инициализироватьstd::initializer_list<int>
, пару итераторов, распределитель и все другие способы инициализацииstd::vector
. - person Drew   schedule 02.11.2019delete
конструктор по умолчанию, либо используйте конструктор пересылки хотя бы с одним параметром. - person Sam Varshavchik   schedule 02.11.2019