2011-05-05 119 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 
} 

通过定义一个特殊版本,你被允许来操作逐位 方式瓦尔阵列。