模板实参推断与函数指针的一些事

最近学了模板实参推断与函数指针的一些知识,觉得有些东西可以写下来与大家分享。这是我的第一篇博客,不足之处请大家指针O(∩_∩)O

首先上代码:

#include<iostream>
#include<string>   
using namespace std;
template <class T>
T add(const T &v1,const T &v2)
{
	return (v1+v2);
}

int main()
{
	int (*pf1) (const int&, const int&) = add;
	cout<<add(1.2,1.3)<<endl;
	cout<<pf1(1.2,1.3)<<endl;
	getchar();
	return 0;
}
输出是

2.5

2

也许有人会问为什么pf1也是指向add函数的,输出却不一样呢。其实,大家再仔细看看就知道了,pf1是一个指向“接受两个 const int& 类型形参并返回 int值的函数”的指针。形参的类型决定了 T 的模板实参的类型, 因此T 的模板实参为 int 型,指针 pf1 引用的是将 T 绑定到 int 的实例化。也就是说这里当你使用pf1时,就意味着你已经确定了模板实参的类型。

下面我我们将程序稍作修改

#include<iostream>
#include<string>   
using namespace std;
template <class T>
T add(const T &v1,const T &v2)
{
	return (v1+v2);
}

int main()
{
	float (*pf1) (const float&, const float&) = add;
	cout<<add(1.2,1.3)<<endl;
	cout<<pf1(1.2,1.3)<<endl;
	getchar();
	return 0;
}
输出显而易见

2.5

2.5

再看

#include<iostream>
#include<string>   
using namespace std;
template <class T0,class T>
T0 add(const T &v1,const T &v2)
{
	return (v1+v2);
}

int main()
{
	int (*pf1) (const float&, const float&) = add;
	cout<<add<int>(1.2,1.3)<<endl;
	cout<<pf1(1.2,1.3)<<endl;
	getchar();
	return 0;
}

这里的输出是

2

2

道理也很简单,这里也不多说了。其实我们只要记得当使用函数指针参加模板实参推断时,我们要关注的是指针指向的是怎么样的一个函数(什么类型的参数,什么类型的返回值),当然其实我还是觉得不用能不用函数指针就不用函数指针为好,哈哈。!





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值