网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月29日
漏签
0
天
c++吧
关注:
647,826
贴子:
2,117,507
看贴
图片
吧主推荐
游戏
6
回复贴,共
1
页
<<返回c++吧
>0< 加载中...
求助!!!萌新学C++,模板问题搞不定
只看楼主
收藏
回复
iamahui
throw
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
为什么第56行不能进行自动类型推导T=int,而57行就行呢
iamahui
throw
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
错误信息
2025-12-29 10:57:16
广告
不感兴趣
开通SVIP免广告
QuicheDY
,
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
std::less没法1转换成std::function
贴吧用户_7RbyGtW
=
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
merge_sort<int>(nums, 0, nums.size() - 1, std::less<int>());
你可以这么改一下,虽然从逻辑上来说,编译器可以推导出T的类型(因为你传递了std::vector<int>和std::less<int>,这两个信息都一致),但是在实际操作中,编译器在处理模板类型推导时可能会因为一些限制或实现细节而无法正确完成推导。所以为了避免这种情况,你可以显式地指定模板参数的类型。
aaaaaaa421
*
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
报错其实说的很清楚,std::less 和 std::function 完全是两个东西,因此编译器无法从这个参数推导出 T 是什么。为了解决这个问题,就需要禁止编译器从此处进行推导,而是从先前 std::vector<T> 推导得到的 T 来确定 comp 的类型,此时编译器可以生成从 std::less 到 std::function 的隐式转换,如此可以通过编译。将函数修改如下即可:
template<class T>
void merge_sort(
std::vector<T>& nums,
int l, int r,
std::type_identity_t<std::function<bool(const T&, const T&)>> comp = std::less<T>()
) { /* ... */ }
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示