#include <iostream>
using namespace std;
class CA
{
public:
CA()
{
cc = 1;
};
int func1(int a, int x)
{
cout<<"func1"<<endl;
cc = a + x;
cout<<"cc is :"<< cc <<endl;
return cc;
}
int func2(int a, int y)
{
cout<<"func2"<<endl;
cc = cc + a * y;
cout<<"cc is:"<<cc<<endl;
return cc;
}
typedef int (CA::*FUNC)(int a, int y);
int Test1()
{
FUNC f;
f = &CA::func2;
return (this->*f) (10, 20);
}
int test2(FUNC func,int a, int b)
{
//ACE涓槸鍏堝仛涓浜涘叡鍚岀殑澶嶆潅鐨勪簨,鐒跺悗璋冪敤涓嶅悓鐨刦unc閮ㄥ垎:
return (this->*func)(a,b);
}
private:
int cc;
};
int main( void )
{
CA a;
a.Test1();
a.test2(&CA::func2,11,3);
return 0;
}
寰堥叿!璋冪敤鑰呭彲浠ユ妸綾葷殑鍑芥暟浣滀負鍙傛暟浼犻?
濂藉啀寮涓嬮潰,鍒╃敤緇ф壙鐨勫叧緋?鎴戜滑榪樺彲浠ュ仛鍒板悓鏍鋒晥鏋?
#include <iostream>
using namespace std;
class CB
{
public:
virtual int func1(int a, int x)=0;
virtual int func2(int a, int x)=0;
typedef int (CB::*FUNC)(int a, int y);
int Test1()
{
FUNC f;
f = &CB::func2;
return (this->*f) (10, 20);
}
int test2(FUNC func,int a, int b)
{
return (this->*func)(a,b);
}
};
class CA:public CB
{
public:
CA()
{
cc = 1;
};
int func1(int a, int x)
{
cout<<"func1"<<endl;
cc = a + x;
cout<<"cc is :"<< cc <<endl;
return cc;
}
int func2(int a, int y)
{
cout<<"func2"<<endl;
cc = cc + a * y;
cout<<"cc is:"<<cc<<endl;
return cc;
}
private:
int cc;
};
int main( void )
{
CB *pB = new CA();
pB->Test1();
pB->test2(&CB::func2,11,3);
delete pB;
return 0;
}
涓婇潰鐨勪緥瀛愬鏋滃簲鐢ㄥ埌Command妯″紡涓?func1 鍜宖unc2灝卞彲浠ュ垎鍒槸Execute 璺?UnDo鐨勬帴鍙d簡.鑷充簬濡備綍瀹炵幇,灝辨槸媧劇敓綾葷殑闂浜?
(涓婅堪浠g爜鍧囧湪MinGW涓祴璇曢氳繃)

]]>