类成员函数的函数指针,和普通函数的函数指针在使用时有一些区别,初学者可能会犯一些错误。
例如:
一个类中有五个相同形式的函数,想通过函数指针来作为接口
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