Juste un petit ajout à la grande JohannesD réponse.
En cas de non-arguments passés à foo
constructeur, le tableau sera initialisé par défaut. Mais parfois, vous voulez garder les sous-jacents de la matrice de uninitilized (peut-être pour des raisons de performances). Vous ne pouvez pas ajouter de constructeur par défaut avec variadic-basé sur un modèle un.
Solution de contournement est argument supplémentaire pour variadic-basé sur un modèle constructeur, pour la distinguer de zéro argument du constructeur:
template<class T, size_t rows, size_t cols>
class array2d
{
std::array<T, rows * cols> m_Data;
public:
array2d() {}
template <typename T, typename... Types>
array2d(T t, Types... ts) : m_Data{ { t, ts... } } {}
};
Alors, maintenant, vous pouvez brace-initilize de l'objet ou de gauche elle non initialisée:
array2d<int, 6, 8> arr = { 0, 1, 2, 3 }; // contains 0, 1, 2, 3, 0, 0, 0, ...
array2d<int, 6, 8> arr2; // contains garbage