2012-01-25 7 views
1

現在、別のプログラマーのコードを最適化する必要があります。彼はたくさんのテンプレートクラスを私に残してくれました。計算を高速化するために、Intels IPP-Libraryの関数を利用したいと思います。問題は、ほとんどの場合、これらの関数では、使用しているデータ型を知る必要があることです。ですから、テンプレートを書き直して、操作を最適化できるようにするために特殊なコードを使用するようにします。元のコードに戻すことはできません。C++テンプレートの特殊ケース

問題は、特定のデータ型が使用されているかどうかを確認する必要があり、それを行う方法がわかりません。

例。私はこのような何かをしたいと思います:

template < class Elem > class Array1D 
{ 
    Array1D<Elem>& operator += (const Elem& a) 
    { 
    if (typeof(Elem) == uchar) 
    { 
     // use special IPP operation here 
    } 
    else 
    { 
      // fall back to default behaviour 
    } 
} 

どのようにこれを行うにはどのようなアイデア?他の図書館の助けを借りなくてもよい。

はあなたに

答えて

1

使用特化:この記事では基本を説明し

template<> 
    class Array1D<uchar> 
    { 
     Array1D<uchar>& operator += (const uchar& a) 
     { 
     // special behaviour 
     } 
    }; 

をしかし、あなたは書き直したいいけない場合Array1D内の他のすべての機能は、+ =演算子のオーバーロード使用することを検討してください。

4

ありがとうあなたのユースケースは、Template Specializationのための完璧なシナリオであるように私には思えます。

1

特化テンプレートのような:

template<> class Array1D<char> 
{ 
    Array1D<char>& operator += (const char& a) 
    { 
     // use special IPP operation here 
    } 
} 

と一般的なバージョンを使用するデフォルトの動作インチ