是否可以通过编程方式构造一个 std::initializer_list?
Is it possible to programmatically construct a std::initializer_list?
我正在包装一个形式为
的 C++ fn
foo(input, std::initializer_list<Option> options);
我需要从另一种格式的数据构建一个选项列表,并将它们传递给 foo
。 I 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
是一种语言支持类型。它的存在使我们可以使用语言构造(列表初始化)。
因此,只有实现才能创建它们,并且只有在进行列表初始化时才需要实现。您的实施可能会提供允许创建它们的扩展,但这不太可能产生标准代码。
我正在包装一个形式为
的 C++ fnfoo(input, std::initializer_list<Option> options);
我需要从另一种格式的数据构建一个选项列表,并将它们传递给 foo
。 I 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
是一种语言支持类型。它的存在使我们可以使用语言构造(列表初始化)。
因此,只有实现才能创建它们,并且只有在进行列表初始化时才需要实现。您的实施可能会提供允许创建它们的扩展,但这不太可能产生标准代码。