模板函数

Template function

本文关键字:函数      更新时间:2023-10-16

谁能描述以下声明?

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

第二个<>有什么用?

template<>表示此函数是模板专用化。第二个<float>意味着这是float的专业化。

例如:

#include <iostream>
template <class T> void somefunc(T arg) {
    std::cout << "Normal template calledn";
}
template<> void somefunc<float>(float arg) {
    std::cout << "Template specialization calledn";
}
int main(int argc, char *argv[]) {
    somefunc(1); // prints out "Normal template called"
    somefunc(1.0f); // prints out "Template specialization called"
    return 0;
}

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

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

它发生在您想要为某些类型 T 执行专用声明时。在前面的示例中,如果 T 是布尔类型,则可能需要更改 vars 数组的行为以节省一些空间(因为每个 bool 条目可能仍需要 32 位)。

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

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