class Base; typedef void (Base::*FUN)(); typedef void (Base::*FUN_I)(int); class Base { public: void BaseFun() { std::cout << "BaseFun" << std::endl; } }; class Cls : public Base { public: void ClsFun(int i) { std::cout << "ClsFun:"<< std::endl; } }; int _tmain(int argc, _TCHAR* argv[]) { FUN fun = Base::BaseFun; Base base; (base.*fun)(); fun = (FUN)Cls::ClsFun;//可以做类型转换 FUN_I fun_i = (FUN_I)fun; (base.*fun_i)(1);//可以这样用,但很危险 Base* pBase = new Cls(); (pBase->*fun_i)(1); delete pBase; return 0; }