C++模板函数的类型推导
【摘要】
我在用泛型编程写二维vector的排序模板时,写出这样一个代码:
//vector的字典序比较,v1<v2是true,v1>=v2是falsetemplate<typename T>bool cmp(vector<T>&v1,vector<T>&v2){ for(i...
我在用泛型编程写二维vector的排序模板时,写出这样一个代码:
-
//vector的字典序比较,v1<v2是true,v1>=v2是false
-
template<typename T>
-
bool cmp(vector<T>&v1,vector<T>&v2)
-
{
-
for(int i=0;i<v1.size()&&i<v2.size();i++)
-
{
-
if(v1[i]!=v2[i])return v1[i]<v2[i];
-
}
-
return v1.size()<v2.size();
-
}
-
//vector的字典序排序
-
template<typename T>
-
void sortVector(vector<vector<T>>&v)
-
{
-
sort(v.begin(),v.end(),cmp);
-
}
编译结果:
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(3802) : 参见“std::sort”的声明
1>c:\users\z00454773\documents\visual studio 2010\projects\20191228.cpp\20191228.cpp\csimsgeek.cpp(273): error C2780: “void std::sort(_RanIt,_RanIt)”: 应输入 2 个参数,却提供了 3 个
这就很奇怪了,一般在sort里面用自定义排序函数,就是加函数指针啊!
很快,我就想到了,这里的cmp是模板函数,它是需要根据类型参数来实例化的。
也就是说,模板函数直接调用是可以自动推导类型的,但是如果要用做函数指针的话,需要传入类型参数才能实例化。
正确代码:
-
//vector的字典序排序
-
template<typename T>
-
void sortVector(vector<vector<T>>&v)
-
{
-
sort(v.begin(),v.end(),cmp<T>);
-
}
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/107536708
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)