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

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

本文关键字:initializer list 编程 方式构 是否 std      更新时间:2023-10-16

我正在包装表单的C++ fn

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

我需要从另一种格式的数据中构造一个选项列表,并将它们传递给foo.我看不到以编程方式构建std::initializer_list的方法——这是对的吗? (如果被迫使用更标准的容器是有意义的,但我想在重构之前检查一下。

> 在标准C++中没有办法。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) };
}

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