不能将函数模板用作函数参数

来源:2-4 测试算法的性能

船帆

2022-03-28

错误显示为“不能将函数模板用作函数参数”
SortTestHelper::testSort(“Selection Sort”, selectionSort, arr, n);
在这个地方报错,就是模板函数不能当成参数传入,但是我搜了一下解决方案
SortTestHelper::testSort(“Selection Sort”, selectionSortL《int》, arr, n);
加上《int》就解决了,说是“这里需要的是一个函数名而不是一个函数模板名,即显示实例化函数模板”
这句话怎么理解呢?

写回答

1回答

liuyubobobo

2022-03-29

本小节课程的官方代码在这里:https://git.imooc.com/coding-71/coding-71/src/master/02-Sorting-Basic/Course%20Code%20%28C++%29/04-Selection-Sort-Detect-Performance


如果课程的代码不能在你的环境下运行,那么一定是因为你使用的 C++ 的编译器版本和课程不一致导致的语法区别。并且大概率的,你使用的是 VS。微软 VS 内置的编译器的标准和 C++ 组委会的标准不一致,有很多自己的标准(和微软的其他产品一样。甚至,你是用的 VS 的版本不一致,编译器的区别都挺大。这也是微软经常干的事儿。)。遇到这种问题,只能根据你现在使用的编译环境去调整语法规则。


最后,这句话的意思是:

对于一个模板函数

template<typename T>
void selectionSort(T arr[], int n)

来说:selectionSort 不是函数名,而是模板名。只有指明了模板的类型,把整个函数的模板部分“扔掉”了,比如 selectionSort<int>,编译器才把它作为函数名。而函数只能传入函数名,不能传入没有规定好模板的模板名。

但依然是,这只是你当前所使用的编译器的规定。


继续加油!:)

0
1
船帆
懂了懂了,谢谢bo哥
2022-04-07
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程