MENU閉じる

LAB

C++プログラムTIPS

研究室プログラムTIPSC++2013.11.28

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

うーん。テンプレートの世界は奥が深いなぁ。

RECRUIT

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

RECRUIT SITE