有没有办法用 for 循环(或任何其他循环)填充 C++ initializer_list?

Is there a way to populate C++ initializer_list with a for loop (or any other loop)?

我需要用 C++ 创建一个交互式会话,用户可以在其中测试我创建的 class。这包括使用不同的构造函数创建 class 的对象。其中之一是使用 initializer_list 的集合构造函数。

在我的代码中我可以 运行:

MyClass example = {1, 2, 3, 4};

现在我需要找到在交互会话期间使用它的方法。我需要以某种方式用用户提供的输入填充 {}。用户最多可以在该列表中传递 100 个参数,因此我可能需要某种循环解决方案来解决我的问题。像这样工作的东西(对不起 C++/Python 伪代码混合):

MyClass example = {a for a in user_input};

你知道我可以用什么来解决这个问题吗?

std::initializer_list 的源数据总是 braced-init-list:{/*stuff*/}。只有这个语法结构可以为这个类型提供支持数组。

initializer_list,顾名思义,就是为了初始化一些东西;它只是一个中介。如果您需要遍历一些手动生成的项目列表,这就是容器的用途。

std::initializer_list 的长度为 constexpr。这意味着它的长度在编译时总是已知的。用户输入没有这个 属性.

因此不适合存储用户输入。

A std::vector 有一个非编译时间长度。考虑使用它。

MyClass 接受 std::spanstd::vector 代替 initializer_list 或除 initializer_list 之外。 (std::span 更新)。

然后将其传入。有多种方法可以使用用户输入填充 std::vector