gpt4 book ai didi

c++ - 通过填充一个元素构造 std::array

转载 作者:行者123 更新时间:2023-11-30 03:43:02 26 4
gpt4 key购买 nike

<分区>

我有一个列表类,其中大小变量是 const成员。这对我很有帮助,因为它强制要求列表的大小可能因运行而异,但不能在单个运行中发生变化。

我想创建这些列表的集合。集合中的列表数量是一个模板变量,所以我想使用 std::array ...即,我想要一个列表数组,其中数组的大小是一个模板参数,每个列表的大小是一个 const。施工时指定

不幸的是:

  • const-size 列表没有默认构造函数(需要指定其大小!),因此我需要为列表的每个元素提供一个构造函数参数。我不能只创建数组然后设置元素
  • 因为我的列表大小是一个模板变量,所以我不能使用标准的初始化列表——所需的元素数量各不相同

我知道还有其他选择:

  • 我可以使用std::vector只是push_back一个接一个地添加元素,直到 vector 的大小等于我的模板参数,但这似乎不够优雅,因为它不会自然地强制执行结果 vector 的大小在完全填充后不应更改的条件。
  • 我可以翻转索引顺序,并有一个常量大小的列表 std::arrays .但是,这与我的其余代码不太吻合;我希望能够将单个 const 大小的列表从数组传递到客户端代码
  • 我可以为 const 大小的列表类创建默认构造函数,创建数组,然后使用 placement new 逐个替换数组元素。这似乎会产生一些不好的副作用(const-sized list 的默认构造函数有什么作用?如果在其他地方不小心调用了怎么办?如果我的继任者不知道我做了什么怎么办?)

由于这些都不是完全理想的,我认为如果有一个数组构造函数(或辅助函数)将作为参数,那就太好了:

  1. T的数组元素个数
  2. 单个 T 对象

...并返回 std::array<T>每个T已从参数 2 复制构造。

有这样的东西吗?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com