固定長多次元配列のラッパ

std::array, M> に要素の連続性の保証がないなら*1,生の多次元配列(配列の配列)をラップすれば確実にそれを保証できるのではないかという.3 秒くらい考えれば,コンテナの要件を満たせない残念なものができるのはわかる気がしますが,書いてしまったものは仕方がないということで.
https://gist.github.com/1222262

#include "multi_array.hpp"

int main()
{
    uni::multi_array<int, 3, 2> a = { { { 1, 2 }, { 3, 4 }, { 5, 6 } } };
    
    a[0][0] = 7;                              // 普通にアクセス
    uni::multi_array<int, 2> a0 = a[0];       // 子配列をコピー
    for (int i : a.flatten()) std::cout << i; // 配列を 'ならす'
}

Variadic Templates を使って可変次元に対応しつつ,プリプロセッサを最後まで避けえたことが個人的満足ポイント.

*1:保証できそうな感じはしますが,配列以外にメンバを持つかも,処理系が末尾に要らんパディングを入れるかも,と言われたらそんな気もする