有人可以描述以下声明吗?
template<> float func<float>(char *txt)
{
blah blah
}
第二个&lt;&gt;对于?
答案 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数组 方式。