函数指针动态绑定
#include "stdafx.h"
#include <iostream>
#include <assert.h>
using namespace std;
class ClassFun;
typedef void (ClassFun::*FunMake)();
class ClassFun
{
public:
enum MainType
{
FUN1,
FUN2
};
explicit ClassFun(MainType type);
~ClassFun() = default;
void fun();
private:
ClassFun() {};
ClassFun& operator = (const ClassFun &) {};
void initMethods();
FunMake m_pfFunMake = nullptr;
void fun1() { cout << __FUNCTION__ << endl; };
void fun2() { cout << __FUNCTION__ << endl; };
MainType m_type;
};
ClassFun::ClassFun(MainType type)
{
m_type = type;
initMethods();
}
void ClassFun::initMethods()
{
switch (m_type)
{
case ClassFun::FUN1:
m_pfFunMake = &ClassFun::fun1;
break;
case ClassFun::FUN2:
m_pfFunMake = &ClassFun::fun2;
break;
default:
break;
}
}
void ClassFun::fun()
{
assert(m_pfFunMake != nullptr);
(this->*m_pfFunMake)();
}
int main()
{
ClassFun classFun1(ClassFun::FUN1);
classFun1.fun();
ClassFun classFun2(ClassFun::FUN2);
classFun2.fun();
system("pause");
return 0;
}