函数指针模板

转载请注明原文链接。

原文链接:http://www.cnblogs.com/xianyunhe/archive/2011/11/27/2265148.html

 

指向一般函数的指针可实现对参数类型、参数顺序、返回值都一样的函数进行封装,指向类的成员函数的指针可实现对一个类中的参数类型、参数顺序、返回值都一样的函数进行封装。对于函数之前,前面已经进行了讨论,该文章的链接为:

http://www.cnblogs.com/xianyunhe/archive/2011/11/26/2264709.html

 

那么,如何能实现对不同类的成员函数进行统一调用呢?我们首先想到的应该会是函数模板和类模板。

下面就一个例子来说明如何实现对不同类的函数成员函数指针的调用。

 

#include <iostream.h>

class CA
{
public:

int Sum(int a, int b)
{
return a+b;
}
};

class CB
{
public:
float Sum(float a, float b)
{
return a+b;
}
};


template <typename ClassType, typename ParaType>
class CC
{
public:
/*函数指针类型模板*/
typedef ParaType (ClassType::*pClassFun)(ParaType, ParaType);

/*函数指针函数模块*/
ParaType Result(ClassType* pClassType, pClassFun fun, ParaType a, ParaType b)
{
return (pClassType->*fun)(a, b);
}

};


void main()
{
/*测试整型*/
CA ca;
CC<CA,int> cc;
int a = 3;
int b = 4;
cout<<"The sum of a and b is "<<cc.Result(&ca, CA::Sum, a, b)<<endl;

/*测试浮点型*/
CB cb;
CC<CB,float>fcc;
float fa = 3.3f;
float fb = 4.6f;
cout<<"The sum of fa and fb is "<<fcc.Result(&cb, CB::Sum, fa, fb)<<endl;
}

 

总结:

1、指针函数模板的使用需要结合类模板和函数模板。

2、类模板中的函数模板的定义必须位于头文件,或者和调用函数位于同一文件,且在调用函数的上方,否则会出现编译错误。

转载于:https://www.cnblogs.com/xianyunhe/archive/2011/11/27/2265148.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值