gpt4 book ai didi

c++ - 什么是用数组(C 或 std::array)元素构造 C++ 元组的单行表达式?

转载 作者:搜寻专家 更新时间:2023-10-30 23:53:45 25 4
gpt4 key购买 nike

我想要一个以数组元素作为成员的元组。特别是,我希望这个数组元素是二维的——所以任何答案都必须适用于一维以上的元素。我最理想的是可以用初始化列表初始化的东西,例如std::tuple<ARRAY_TYPE, ...>({{0, 1}, {2, 3}}, ...) .

看起来这样的元组很难构造,需要手动初始化(即 for 循环等)。这是我尝试过的:

std::tuple<int[M][N], ...> -- 由于 C 样式数组的限制,这不起作用。元组本身是一个有效的类型,但初始化需要手动完成(而不是在构造时)。

std::tuple<std::array<std::array<int, M>, N>, ...> -- 我认为这可行,但出于某种原因,类似于 std::tuple<std::array<std::array<int, 2>, 2>, ...>({{0, 1}, {2, 3}}, ...)失败并出现“没有匹配的构造函数错误”。不过,它确实适用于 1D。

std::tuple<std::vector<std::vector<int>>, ...>({{0, 1}, {2, 3}}, ...)实际上确实有效,但 vector 在这里似乎有点矫枉过正

有什么想法吗?有什么方法可以让 C 风格的数组工作吗?那将是理想的。

最佳答案

你需要一对额外的括号 {}阵列周围:

std::tuple<std::array<std::array<int, 2>, 2>, int> v({{{0, 1}, {2, 3}}}, 1);
^ ^

这是因为 std::array使用聚合初始化 进行初始化。它适用于 std::vector因为有 std::vector<std::initializer_list<T>构造函数(std::array 没有任何构造函数)。

关于c++ - 什么是用数组(C 或 std::array)元素构造 C++ 元组的单行表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38586439/

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