类成员函数的函数指针

来源:互联网 发布:cad室内平面图具体数据 编辑:程序博客网 时间:2024/04/29 18:21

类成员函数的函数指针,和普通函数的函数指针在使用时有一些区别,初学者可能会犯一些错误。

例如:

一个类中有五个相同形式的函数,想通过函数指针来作为接口

class CSimilarMethod
{
public:
      double IntensityScore(int Peak1,int  vPeak2);
      double DP(int Peak1,int  vPeak2);
      double DP_Mod(int Peak1,int  vPeak2);
      double DP_Mod_Half(int Peak1,int  vPeak2);
      double MatchCount(int Peak1,int  vPeak2);
private:
 
    double (*SimilarFunc[5])(int,  int);
};

在成员函数中赋值

    SimilarFunc[0] = IntensityScore;
    SimilarFunc[1] = DP;
    SimilarFunc[2] = DP_Mod;
    SimilarFunc[3] = DP_Mod_Half;
    SimilarFunc[4] = MatchCount;

会出现编译错误"error C2440: “=” : 无法从“double (__thiscall CSimilarMethod::* )(int,int)”转换为“double (__cdecl *)((int,int))”"

需要在定义函数指针修改为double (CSimilarMethod::*SimilarFunc[5])(int,  int);

 

在成员函数中使用函数指针时,SimilarFunc[m_eSimilarMethod](vPeak1, vPeak2);或者

(*SimilarFunc[m_eSimilarMethod])(Peak1, Peak2);均会报错“error C2064: 项不会计算为接受 2 个参数的函数”

修改为(this->*SimilarFunc[m_eSimilarMethod])(Peak1, vPeak2);后编译成功!

 

 

可参考此篇文章http://hi.baidu.com/coolbye/blog/item/22a405245f714733c8955989.html

 

原创粉丝点击