关于函数模版

老灰狼 2012-05-11 09:30:25


template <class T,class U> T fun1(U a,U b)
{
return 1;
}

fun1(1,1) //这样不允许


/////////////////////////////////
template <class T> T fun2(T a,T b)
{
return 1;
}

fun2(1,1);//这样允许.





问题就来了,为什么第一种不可以呢? 试了下是返回类型造成的不匹配.不知道为何或产生这个问题.
...全文
79 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
老灰狼 2012-05-11
  • 打赏
  • 举报
回复
很谢谢,这样调用模版函数看来是一个好习惯
[Quote=引用 5 楼 的回复:]
可以这样免去类型的推导:
fun1<int,int>(1,1);
[/Quote]
老灰狼 2012-05-11
  • 打赏
  • 举报
回复
这个不能推导出是因为 return 1;这里的1不是个唯一类型么?
[Quote=引用 2 楼 的回复:]
函数模板的所有模板参数必须能够推导出来(fun1 的 T 推导不出来),否则不会实例化生成函数,因此,fun1 的调用找不到对应的函数。
这样应该就行了

C/C++ code

fun1<int>(1,1);
[/Quote]
rularys 2012-05-11
  • 打赏
  • 举报
回复
可以这样免去类型的推导:
fun1<int,int>(1,1);
qq120848369 2012-05-11
  • 打赏
  • 举报
回复
int n = func(1, 1);就可以了。
rularys 2012-05-11
  • 打赏
  • 举报
回复
template <class T,class U> T fun1(U a,U b)
{
return 1;
}
不能从函数的返回类型推导出 T ,所以T要出现在函数的参数列表里面才可以
ri_aje 2012-05-11
  • 打赏
  • 举报
回复
函数模板的所有模板参数必须能够推导出来(fun1 的 T 推导不出来),否则不会实例化生成函数,因此,fun1 的调用找不到对应的函数。
这样应该就行了

fun1<int>(1,1);
老灰狼 2012-05-11
  • 打赏
  • 举报
回复

template <class T,class U> T fun1(U a,U b)
{
return 's';
}


第一种方式改成如此也不可以.

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧