模板功能

时间:2011-05-05 22:13:31

标签: c++ templates

有人可以描述以下声明吗?

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

第二个&lt;&gt;对于?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

这是一个专门的模板功能。当您尝试专用通用模板函数时会发生这种情况。 通常你会有另一个减速

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

有时你想为某个类型T做一个专门的声明。在前面的例子中,如果T是bool类型,你可能想要改变vars数组的行为以节省一些空间(因为每个bool条目可能仍然需要32位)。

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

通过定义专用版本,您可以按位操作vars数组 方式。