2012年11月27日火曜日

std::array を sizeof()

背景
  • C++で書いていても、OpenGLなどのC用のAPIを使っていると、生の配列を受け渡す必要が出てくる。
  • sizeof( Cの配列 )は便利。
  • std::vectorを使って、受け渡しが必要なときは.data()メンバ関数を呼べば良いかと思ったが、std::vectorはsizeof()が使えない。vec.size() * sizeof(typename)すれば良いが、多次元配列の場合は?


そこでstd::arrayはどうなんだろうと思ってsizeof() してみたら上手くいくようだ。
コード:

おお! C配列の完全上位互換として使って良さそう。



しかし多次元配列ならやはり、C配列そのまま使うのが一番楽かもしれない。
  • std::arrayを入れ子にして多次元配列を実現しても.size()やsizeofで全体の大きさは取得できない。
  • boost/multi_arrayなら.size(), sizeofが有効で、複雑な走査もできるが、初期化がC配列のように簡単にはできないので、わざわざ使うのが億劫に感じてしまう。






追記:
結局、C配列を使い続けることにした。
そして .size()の代わりに以下のテンプレート関数を書いた。
コード:

これで多次元配列でも要素数を調べられる。
3次元配列以上も同様に拡張できる。

    0 件のコメント: