找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2128|回复: 8

求解c++函数模板问题

[复制链接]

1

主题

5

回帖

26

积分

用户组: 初·技术宅

UID
1268
精华
0
威望
1 点
宅币
18 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2015-11-18
发表于 2015-11-18 23:50:52 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
画圈的地方我不知道它为啥会报错,能帮忙看看它为啥会错吗?求给解释解释!!!
代码.png
代码1.png
回复

使用道具 举报

0

主题

76

回帖

6758

积分

用户组: 真·技术宅

UID
604
精华
0
威望
2 点
宅币
825 个
贡献
5853 次
宅之契约
0 份
在线时间
101 小时
注册时间
2014-12-20
发表于 2015-11-19 09:46:55 | 显示全部楼层
  1. template<typename T1, typename T2> auto f(T1 a, T2 b) -> decltype(a+b)
  2. {
  3.         return a+b;
  4. }
复制代码


C++14里可以这样写:
  1. template<typename T1, typename T2> auto f(T1 a, T2 b)
  2. {
  3.         return a+b;
  4. }
复制代码

回复 赞! 靠!

使用道具 举报

1

主题

5

回帖

26

积分

用户组: 初·技术宅

UID
1268
精华
0
威望
1 点
宅币
18 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2015-11-18
发表于 2015-11-19 14:23:53 | 显示全部楼层
为何函数模板使用了返回值类型推导没出错,同时模板具体化时也使用返回值类型推导就出错了!!
回复 赞! 靠!

使用道具 举报

1

主题

5

回帖

26

积分

用户组: 初·技术宅

UID
1268
精华
0
威望
1 点
宅币
18 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2015-11-18
发表于 2015-11-19 14:24:55 | 显示全部楼层
我知道可以你那样写,但是就是不知道为啥我那样写会出错。
回复 赞! 靠!

使用道具 举报

0

主题

76

回帖

6758

积分

用户组: 真·技术宅

UID
604
精华
0
威望
2 点
宅币
825 个
贡献
5853 次
宅之契约
0 份
在线时间
101 小时
注册时间
2014-12-20
发表于 2015-11-19 15:19:08 | 显示全部楼层
都城 发表于 2015-11-19 14:23
为何函数模板使用了返回值类型推导没出错,同时模板具体化时也使用返回值类型推导就出错了!! ...

函数模板不管代码对错编译器是不检查的. 只有具体化的时候才检查
回复 赞! 靠!

使用道具 举报

1

主题

5

回帖

26

积分

用户组: 初·技术宅

UID
1268
精华
0
威望
1 点
宅币
18 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2015-11-18
发表于 2015-11-20 01:04:46 | 显示全部楼层
0x01810 发表于 2015-11-19 15:19
函数模板不管代码对错编译器是不检查的. 只有具体化的时候才检查

函数模板和模板具体化同时使用返回值类型推导报错,不同时就报错,怎么回事呢?
回复 赞! 靠!

使用道具 举报

1

主题

5

回帖

26

积分

用户组: 初·技术宅

UID
1268
精华
0
威望
1 点
宅币
18 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2015-11-18
发表于 2015-11-20 01:05:15 | 显示全部楼层
不同时不报错
回复 赞! 靠!

使用道具 举报

1

主题

5

回帖

26

积分

用户组: 初·技术宅

UID
1268
精华
0
威望
1 点
宅币
18 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2015-11-18
发表于 2015-11-20 01:05:31 | 显示全部楼层
刚上面打错了
回复 赞! 靠!

使用道具 举报

0

主题

76

回帖

6758

积分

用户组: 真·技术宅

UID
604
精华
0
威望
2 点
宅币
825 个
贡献
5853 次
宅之契约
0 份
在线时间
101 小时
注册时间
2014-12-20
发表于 2015-11-20 16:16:21 | 显示全部楼层
本帖最后由 0x01810 于 2015-11-20 16:18 编辑

模板具体化本来就是针对模板的. 函数模板就是模板.

你这样写:


  1. template<> auto f(int a, double b) -> decltype(a+b)
  2. {
  3.         return a+b;
  4. }

  5. int main()
  6. {
  7.         cout<<(f(12, 20.12))<<endl;

  8.         return 0;
  9. }
复制代码



error: no function template matches function template specialization 'f'.

是想表达什么?  这种写法有问题吧. 函数模板只不过多了个显式推导参数类型.
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-26 08:49 , Processed in 0.053588 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表