C++模板问题小记
写排序函数时遇到一个关于模板的问题,有一定记录价值。需求如下:
1 | template<class T> |
其中 mySort 是我自己编写的排序函数,vec 是数组,len 是数组长度;sortTester 是对数器,用来生成随机样例来检测传入的排序函数,参数 fun 为我们要传入并检测的函数。
当我想当然地进行如下调用时,编译器报错:
1 | sortTester(mySort); |
这是很容易犯的一种错误,其实稍加思索后就能发现问题所在: sortTester 的参数类型 function 是一个模板类型,而传入的参数 mySort 是一个函数模板,所以 sortTester 当然就无法进行函数类型推断,因而报错。所以我们必须传入一个确定的函数类型,而非函数模板,即,将函数模板实例化。
有下面两种方式将函数模板实例化(这里实例化为 int ):
1 | //方式1 |
1 | //方式2 |
尤其是第二种 lambda 方式值得学习!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 极简!
评论