この型の時だけこういう挙動にしたい! テンプレートの特殊化

template-specialize.png

この型だけこういう関数を使いたい!という要望にお応え。

template <typename T>
struct vec3{//計算用の頂点構造体
        T x;
        T y;
        T z;
        void glVertex(){}//空のを書いておく 空じゃなくてもいい
        } ;
        //クラスの外側にある特定の型の関数を書く。
template<> void vec3<int>::glVertex(){glVertex3i(x,y,z);}//int型だった場合の挙動
template<> void vec3<float>::glVertex(){glVertex3f(x,y,z);}
template<> void vec3<double>::glVertex(){glVertex3d(x,y,z);}

template<>というプレフィックスをつけるのがポイント。
template<>は、この関数がテンプレート引数なしで指定できる特別バージョンであることを示す。

サポートサイト Wikidot.com