MENU閉じる

HEXA BLOG

プログラム

HEXA BLOGプログラム2010.1.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
うーん。テンプレートの世界は奥が深いなぁ。たらーっ(汗)

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE