#include <iostream>
#include <array>
#include <cstddef>

template <std::size_t W, std::size_t H>
class Class {
public:
    Class(const int (&_data)[H][W]) {
        for (std::size_t h = 0; h != H; ++h)
            for (std::size_t w = 0; w != W; ++w)
                data[h][w] = _data[h][w];
    }

    template <typename... Args>
    Class(Args&&... args) {
        const std::array<int, H * W> temp{std::forward<Args>(args)...};
        for (std::size_t h = 0; h != H; ++h)
            for (std::size_t w = 0; w != W; ++w)
                data[h][w] = temp[h * W + w];
    }

    void print() const {
        for (std::size_t y = 0; y != 2; ++y) {
            for (std::size_t x = 0; x != 3; ++x) {
                std::cout << data[y][x] << " ";
            }
            std::cout << std::endl;
        }
    }
private:
    int data[H][W];
};

int main() {
    Class<3, 2> c{ 1, 2, 3, 4, 5, 6 };
    c.print();
}