带有模板参数的函数指针

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

               

如果能定义一个带有模板参数的函数指针,例如:

template <class T> void (*pf)(T);

它就可以指向任何一个带有一个任何类型参数的函数了。但这种语法不被编译器支持。

可以把这种类型的指针作为一个普通模板函数的参数来间接实现这种效果。例如:

#include <iostream>#include <typeinfo>using namespace std;#define DF(func,type) / void func(type) { cout << #func"(" << typeid(type).name() << ")/n"; }DF(a,char)DF(b,short)DF(c,int)DF(d,double)DF(e,long*)template <typename T> void gx(void (*pf)(T)) { pf(T());}int main() { gx(a); gx(b); gx(c); gx(d); gx(e); return 0;}

上面的代码中,DF宏用来产生函数。DF有两个参数,第一个参数是函数名字,第二个参数是所要产生的函数的参数的类型。DF可以产生仅有一个参数(可以是任何类型)的函数。函数gx的参数是一个函数指针,它指向一个只有一个参数的函数。这样,虽然不能直接定义带有模板参数的函数指针,但是可以利用函数模板来把这种指针作为函数参数。上面的代码运行结果为:

a(char)

b(short)

c(int)

d(double)

e(long *)

           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值