每个人都从 std::initializer_list
创建 std::vector
--- ,但是反过来呢?
例如。如果您使用 std::initializer_list
作为参数:
void someThing(std::initializer_list<int> items)
{
...
}
有时您将项目放在 vector<T>
而不是文字列表中:
std::vector<int> v;
// populate v with values
someThing(v); // boom! No viable conversion etc.
更普遍的问题是:如何从 STL 可迭代对象中创建 stl::initializer_list
,而不仅仅是 std::vector
。
原文由 Fil 发布,翻译遵循 CC BY-SA 4.0 许可协议
我发布了一种似乎可行的方法,但不幸的是,由于 initializer_lists 被视为对值的本地范围副本的引用而导致内存访问冲突。
这是一个替代方案。为每个可能的项目数生成一个单独的函数和一个单独的静态初始化器列表,这些项目使用参数包进行计数。这不是线程安全的,并且使用 const_cast(这被认为非常糟糕)写入静态 initializer_list 内存。但是,它在 gcc 和 clang 中都能正常工作。
如果由于某种不明原因您需要解决此问题并且没有其他选择,您可以尝试这个 hack。