是否可以以编程方式构造std :: initializer_list?

时间:2018-09-05 11:05:38

标签: c++ initializer-list

我正在包装形式为

的C ++ fn
foo(input, std::initializer_list<Option> options);

我需要从另一种格式的数据构造一个选项列表,并将它们传递到foo中。 I can't see一种以编程方式构造std::initializer_list的方式–是这样吗? (如果有人被迫使用一个更标准的容器,这是有道理的,但是我想在重构之前进行检查。)

2 个答案:

答案 0 :(得分:6)

标准C ++中没有办法。 std::initializer_list是一种语言支持类型。它的存在使我们可以使用一种语言构造(列表初始化)。

因此,只有实现才能创建它们,并且仅在执行列表初始化时才需要实现。您的实现可能会提供允许其创建的扩展,但不太可能生成标准代码。

答案 1 :(得分:0)

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) };
}

可以,但是仅适用于固定大小的列表。