use*_*829 2 c++ stl c++11 stdtuple stdarray
我想要一个有数组元素作为成员的元组.特别是,我希望这个数组元素是2D - 所以任何答案都必须超过1D.我理想的是我可以用初始化列表初始化的东西,例如std::tuple<ARRAY_TYPE, ...>({{0, 1}, {2, 3}}, ...).
看起来这样的元组很难构造,需要手动初始化(即,用于循环等).这是我尝试过的:
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}}, ...)实际上确实有效,但是这里的矢量似乎有些过分
有什么想法吗?有什么方法可以让C风格的数组工作吗?那将是理想的.
你需要{}在数组周围增加一对括号:
std::tuple<std::array<std::array<int, 2>, 2>, int> v({{{0, 1}, {2, 3}}}, 1);
^ ^
Run Code Online (Sandbox Code Playgroud)
这是因为std::array使用聚合初始化初始化.它的工作原理是std::vector因为有std::vector<std::initializer_list<T>构造函数(std::array没有任何构造函数).