#include <iostream>

template <typename T>
class MultiArray
{
public:
    explicit MultiArray(T* arr, int sizex, int sizey) : data(arr), sizey(sizey) {}

    const T* operator [] (int x) const { return &data[x * sizey]; }
    T* operator [] (int x) { return &data[x * sizey]; }

private:
    T* data;
    int sizey;
};

int main()
{
    int arr[12] = {
        1, 2, 3, 4,
        5, 6, 7, 8,
        9, 10, 11, 12,
    };

    MultiArray<int> m(arr, 3, 4);

    for (int i = 0; i != 3; ++i) {
        for (int j = 0; j != 4; ++j) {
            std::cout << m[i][j] << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}
