LAB
研究室
C++プログラムTIPS
Type Traits(型特性)
今日は、最近はまっている”C++のテンプレート”についてお話したいと思います。
標準C++ライブラリのvectorやlistなどでテンプレートを使ったことのある方も多いと思いますが、
実は、テンプレートを駆使するとコンパイル時にいろいろと特殊なことができます。
なかでも面白いのが、コンパイル時に型の特性を判断するというものです。
簡単な例として
以下のようにプログラムすると、型がポインタ型かどうか判別できます。
(注)ここでテンプレートの部分特殊化という機能を用いています。
詳しくは http://www.geocities.jp/ky_webid/cpp/language/037.html
#include <stdio.h> template<typename T> struct IsPointer { static const bool value = false; }; // 部分特殊化 template<typename T> struct IsPointer<T*> { static const bool value = true; }; int main() { printf("int is %s pointer.\n", IsPointer<int>::value ? "" : "not"); printf("int* is %s pointer.\n", IsPointer<int*>::value ? "" : "not"); return 0; }
上記のような型の特性を調べるテンプレートを組み合わせることで、
コンパイル時に型の継承関係などを調べることができます。
このようなテンプレートの使い方に関しては
“C++テンプレートテクニック”という本がコンパクトにまとまりつつも、深くまで踏み込んでいてお勧めです。
http://www.amazon.co.jp/dp/4797354534
うーん。テンプレートの世界は奥が深いなぁ。
CATEGORY
- 製品事例 (7)
- デモプログラム (18)
- プログラムTIPS (41)
- C言語 (5)
- C++ (6)
- C++cording (4)
- Ruby (8)
- VisualStudioの使い方 (3)
- 最適化Tips (5)
- ゲーム開発テクニック (2)
- その他 (7)