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配列のように簡単にはできないので、わざわざ使うのが億劫に感じてしまう。