Jak zainicjować zagnieżdżony (2D) std::array
poprzez listę inicjalizującą?Lista inicjalizatorów do inicjalizacji elementu std :: array w postaci 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)...}} {}
};
Klasa Block
powinien móc zainicjować block
członek jak poniżej:
Block<3, 2> b {{ {1, 2, 3}, {4, 5, 6} }};
Uwaga: Mamy zdolność do zainicjowania std::array
bezpośrednio w C++ 11:
std::array<std::array<int, 3>, 2> b {{ {1, 2, 3}, {4, 5, 6} }};
Używam gcc-4.9.0
Dokonując 'block' prywatne i zapewniając konstruktor,' Block' teraz ISN” t agregat więcej. Ponieważ inicjatory z ustalonym stężeniem nigdy nie są wydedukowane, jedyną poprawną wartością zainicjowaną dla obiektu typu 'Blok <3,2>' jest teraz 'Blok <3,2> b {1,2,3,4,5,6}' – dyp
Powróć do wersji, która ma sens dla odpowiedzi, a następnie zadać nowe pytanie. – Shog9