○関数ポインタ

int Func(int , int){}
このような関数があるとします。
int (*pF)(int , int);//pF という変数は、関数へのポインタである、という変数を宣言をしています。 
pF = Func;//関数がおかれているアドレスを代入
int x = (*pF)(1 , 2);//関数 test を引数 int int で呼び出ししています

○関数ポインタ配列

void a(void);
void b(void);
void c(void);
このような関数があるとします。

void (*Func[])() = {a,b,c};
(*Func[i])();

○MFCでのクラスでの関数ポインタ

void ***::Func(){}
このような関数があるとします。

void(CObject::*pF)();  //pF という変数は、関数へのポインタである、という宣言をしています。 
、 
pF=(void(CObject::*)())this->Func ;	//関数がおかれているアドレスを代入

(this->*pF)(); //関数 Func を引数 void で呼び出ししています

○MFCの自分の関数をその他のクラスから実行させる考察

inabaクラスのtestメソッドが
inabaクラスで宣言されたfuncクラスに読み出されています。

template <class temp> 
class func{
public :
	void load(temp*pParam,void(temp::*pF)()){
		(pParam->*pF)();
	}
};

void inaba::test()
{
			while(true){
				TRACE("a");
		//		sleep(1000);
			}
}

void inaba::OnButton1() //スレッドの開始
{
	func<inaba> f;
	f.load(this,this->test);
}



▲トップページ > Windows と C++