2011-05-05 95 views
2

任何人都可以描述下面的聲明嗎?模板功能

template<> float func<float>(char *txt) 
{ 
blah blah 
} 

什麼是第二個<> for?

回答

13

template<>表示該功能是模板專用化。第二個<float>意味着這是float的專業化。

例如:

#include <iostream> 

template <class T> void somefunc(T arg) { 
    std::cout << "Normal template called\n"; 
} 

template<> void somefunc<float>(float arg) { 
    std::cout << "Template specialization called\n"; 
} 

int main(int argc, char *argv[]) { 
    somefunc(1); // prints out "Normal template called" 
    somefunc(1.0f); // prints out "Template specialization called" 

    return 0; 
} 
2

這是一個專門的模板功能。當你嘗試專門化一個通用模板函數時會發生這種情況。 通常你將有另一次減速度

template<typename T> float func(char *txt) { 
    T vars[1024]; 
    blah blah 
} 

這種事有時你想要做某些類型T在前面的例子中專門聲明,如果T是布爾類型,你可能要改變瓦爾陣列的行爲以節省一些空間(因爲每個布爾入口可能仍然需要32位)。

template<> float func<bool>(char *txt) { 
    int vars[32]; 
    blah blah 
} 

通過定義一個特殊版本,你被允許來操作逐位 方式瓦爾陣列。