如何std::array通过初始化列表初始化嵌套(2D)?
template <std::size_t W, std::size_t H>
class Block
{
std::array<std::array<int, W>, H> block;
public:
template <typename ...E>
Block(E&&...e) : block {{std::forward<E>(e)...}} {}
};
Run Code Online (Sandbox Code Playgroud)
该类Block应该能够初始化block成员,如下所示:
Block<3, 2> b {{ {1, 2, 3}, {4, 5, 6} }};
Run Code Online (Sandbox Code Playgroud)
注意:我们可以std::array直接在C++ 11中初始化:
std::array<std::array<int, 3>, 2> b {{ {1, 2, 3}, {4, 5, 6} }};
Run Code Online (Sandbox Code Playgroud)
我正在使用gcc-4.9.0
当涉及到嵌套结构时,大括号的规则非常复杂.
代码中最简单的形式是:
Block<3, 2> b {1, 2, 3, 4, 5, 6};
Run Code Online (Sandbox Code Playgroud)
这基本上省略了所有内部括号 - 语言允许这些遗漏.
下一个稍微复杂的语法是这样的:
Block<3, 2> b {{1, 2, 3, 4, 5, 6}};
Run Code Online (Sandbox Code Playgroud)
它仍然省略了大括号,但就Block其成员而言,它是完全支撑的.它省略了array它及其成员的大括号.
这一个是完全支撑:
Block<3, 2> b {{{ {{1, 2,3}}, {{4,5,6}} }}};
Run Code Online (Sandbox Code Playgroud)
它支撑所有内部结构.
有关详细说明,请参阅我的其他答案
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |