2010年01月18日

Type Traits(型特性)

お久しぶりです。みやじーです。exclamation×2
今日は、最近はまっている"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

うーん。テンプレートの世界は奥が深いなぁ。たらーっ(汗)

posted by 管理人 at 21:02 | Comment(0) | プログラミング
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。