是否可以以编程方式构造 std::initializer_list?
Is it possible to programmatically construct a std::initializer_list?
我正在包装表单的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) };
}
所以你可以,但仅适用于固定大小的列表。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- C++中带有List类的迭代器Segfault
- 使用"std::unordereded_map"映射到"std::list"对象
- GCC对可能有效的代码抛出init list生存期警告
- 使用std::list创建循环链表
- C2664 无法从'initializer list'转换参数
- 使用 std::min "no matching function for call to ‘min(<brace-enclosed initializer list>)’"时出错
- 在C++中标记化"Braced Initializer List"样式字符串(使用 Boost?
- "默认参数":无法从'initializer list'转换为'std::initializer_list'
- 无法从'initializer-list'转换为用户控制器
- 如何修复<function-style-cast>错误:无法从'initializer list'转换为asdending比较<W>(模板函子)
- 递归调用中出现错误"[Error] expression list treated as compound expression in initializer [-fpermissive]"
- VS2015无法从'initializer list'转换为'std::string'错误
- 编译器错误:"Non-aggregates cannot be initialized with initializer list."
- 无法转换...从 '<brace-enclosed initializer list>' 到 地图
- 无法将'<brace-enclosed initializer list>'转换为'double'作为回报
- <function-style-cast> 错误:无法从'initializer list'转换为'std::thread'
- initializer语言 - list不能转换为const margin *