网上搜了之后,发现没有真正给出使用成员函数例子的代码,只有自己摸索了:
#include <iostream>
#include <map>
#include <boost/bind.hpp>
using namespace std;
class CMyClass
{
typedef void (CMyClass::*func)(int);//mark
typedef map<int, func> FunMap;
public:
void func1(int aNum1)
{
++aNum1;
cout << aNum1 << endl;
}
void func2(int aNum2)
{
++aNum2;
cout << aNum2 << endl;
}
void Init();
FunMap& GetFunMap(){return m_FunMap;}
void PrintNumFun(int aNum)
{
FunMap::iterator lIter = m_FunMap.find(aNum);
if (m_FunMap.end() != lIter)
{
(this->*m_FunMap[aNum])(aNum);
}
else
{
cout << "Can't Find " << aNum << endl;
}
}
private:
FunMap m_FunMap;
};
void CMyClass::Init()
{
m_FunMap.insert(make_pair(1,&CMyClass::func1));//mark
m_FunMap.insert(make_pair(2,&CMyClass::func2));
}
int main()
{
CMyClass lCMyClass;
lCMyClass.Init();
lCMyClass.PrintNumFun(100);
return 0;
}
还有一张写法:
void PrintNumFun(int aNum)
{
FunMap::iterator lIter = m_FunMap.find(aNum);
if (m_FunMap.end() != lIter)
{
((*this).*(lIter->second))(aNum);
}
else
{
cout << "Can't Find " << aNum << endl;
}
}
成员函数指针有点特别,嗯,记下吧,以后方便查看。