我需要在C++中创建一个交互式会话,用户可以在其中测试我创建的类。这包括使用其不同的构造函数创建该类的对象。其中之一是使用 initializer_list 的集合构造函数。
在我的代码中,我可以运行:
MyClass example = {1, 2, 3, 4};
现在我需要找到在交互式会话期间使用它的方法。不知何故,我需要用用户提供的输入填充 {}。用户最多可以在该列表中传递 100 个参数,所以我可能需要某种循环解决方案来解决我的问题。类似的工作方式(抱歉C++/Python 伪代码混合):
MyClass example = {a for a in user_input};
你知道我可以用来解决这个问题吗?
std::initializer_list
的源数据始终是大括号的初始化列表:{/*stuff*/}
。只有此语法构造才能为此类型提供后备数组。
顾名思义,initializer_list
用于初始化某些东西;它只是一个中介。如果您需要循环访问一些手动生成的项目列表,这就是容器的用途。
std::initializer_list
的长度constexpr
。 这意味着它的长度在编译时总是已知的。 用户输入没有此属性。
因此,不适合存储用户输入。
std::vector
具有非编译时间长度。 考虑使用它。
MyClass
接受std::span
或std::vector
,而不是initializer_list
或作为的补充。 (std::span
比 C++11 更新)。
然后把它传进去。 您可以通过多种方式使用用户输入填充std::vector
。