2012-01-25 33 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所有其他功能考慮使用重載的運算符+ =。

1

專營模板,如:

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

和一般版本使用的默認行爲。