4. 構造体に関するテンプレート

Cでは、構造体のメンバや型などの情報を取得することができません。C++でも基本的にはそうなのですが、もし、構造体のメンバや型などの情報を取得する必要がある場合、あるいはメンバを連番で管理する必要がある場合には、std::tr1::tuple クラステンプレートという強い味方があります。

これは次期規格で導入される予定のものですが、どんなものか興味のある方は、std::tr1::tuple の元になったboost::tuple を調べてみてください。また、Boost C++ Libraries 1.34 からは、TR1ライブラリがサポートされるようになりましたので、それを用いれば、次期規格の仕様を先取りすることができます。

tuple クラステンプレートは、簡単にいえば pair クラステンプレートを拡張したもので、3 つ以上のメンバを扱うことができます。tuple では、各メンバへのアクセスは連番を用いて行います。また、<utility> ヘッダには、tuple が保持するメンバ数を返す std::tr1::tuple_size メタ関数と、tuple の指定したメンバの型を返す std::tr1::tuple_element メタ関数が提供されています(Boost C++ Libraries では TR1 ライブラリで提供されます)。

こうした tuple に対する操作は静的にしか行うことができませんが、tuple のメンバは静的に決定されるわけですから、特に問題になることはありません。


元ネタ
このエントリーを含むはてなブックマーク