投稿日時:
最終更新日時:
テンプレートによる多次元配列の表現
はじめに
多次元配列をテンプレートによりあらわす方法を考える。
例えば、
は静的に宣言される多次元配列であるが、配列の添え字を可変長テンプレートによりあらわすことができれば便利である。
環境はVisual Studio 2017によるC++14である。
実装
可変長テンプレートによる配列の表現
安直な発想として、以下のようにすることで実装可能であると考えられる。
しかし、これでは上手く動かない。
なぜならば、
といったコードでどうなるか実行すると
といった感じに添え字が逆順になる。言語仕様はよく知らないため何故かはわからない。スタックが関係しているのだろうか。
実際、remove_extent
を用いて
を見れば配列の次数である5が除去されていることがわかる。
index_tuple
によるシーケンスを逆順にする
上記による議論により、index_tuple
を逆順にするメタ関数を実装することにより目的を達成できると考えられる。そのためのコードは以下のようになる。
ただ単に2つのindex_tuple
を用意して先頭から取り出したものを別のindex_tuple
に先頭から入れるだけである。
完成
reverse_type_tuple
を導入することで完成する。
このようにして、テンプレートによる多次元配列を実装することができた。
これを用いることで静的なテンソル型の設計や標準ライブラリにおけるstd::array
の多次元化をすることが可能となる。