不能将函数模板用作函数参数
来源: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
如果课程的代码不能在你的环境下运行,那么一定是因为你使用的 C++ 的编译器版本和课程不一致导致的语法区别。并且大概率的,你使用的是 VS。微软 VS 内置的编译器的标准和 C++ 组委会的标准不一致,有很多自己的标准(和微软的其他产品一样。甚至,你是用的 VS 的版本不一致,编译器的区别都挺大。这也是微软经常干的事儿。)。遇到这种问题,只能根据你现在使用的编译环境去调整语法规则。
最后,这句话的意思是:
对于一个模板函数
template<typename T> void selectionSort(T arr[], int n)
来说:selectionSort 不是函数名,而是模板名。只有指明了模板的类型,把整个函数的模板部分“扔掉”了,比如 selectionSort<int>,编译器才把它作为函数名。而函数只能传入函数名,不能传入没有规定好模板的模板名。
但依然是,这只是你当前所使用的编译器的规定。
继续加油!:)
012022-04-07
相似问题