是否可以通过编程方式构造一个 std::initializer_list?

Is it possible to programmatically construct a std::initializer_list?

我正在包装一个形式为

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

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

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

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

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

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