带有模板参数的函数指针

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!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

猜你喜欢

转载自blog.csdn.net/qq_43668159/article/details/87883859