Можно ли программно построить std :: initializer_list? - PullRequest
0 голосов
/ 05 сентября 2018

Я обёртываю C ++ fn вида

foo(input, std::initializer_list<Option> options);

Мне нужно составить список параметров из данных в другом формате и передать их в foo. Я не вижу способа конструирования std::initializer_list программным способом - это правильно? (Было бы целесообразно, если бы кто-то был вынужден использовать более стандартный контейнер, но я бы хотел проверить это перед повторным разложением.)

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

В стандарте C ++ нет пути. std::initializer_list - это тип языковой поддержки. Он существует, чтобы дать нам возможность использовать языковую конструкцию (инициализация списка).

Таким образом, только реализация может создавать их, и реализация требуется только при инициализации списка. Ваша реализация может предложить расширение, которое позволяет их создавать, но вряд ли приведет к стандартному коду.

0 голосов
/ 05 сентября 2018
void test() {
  double d1 = 1.1;
  double d2 = 2.2;
  double d3 = 3.3;
  std::initializer_list<int> init_list{ static_cast<int>(d1), static_cast<int>(d2), static_cast<int>(d3) };
}

Так что вы можете, но только для списков фиксированного размера.

...