ページ 11

関数ポインタについて質問

Posted: 2009年3月18日(水) 03:14
by akio
はじめまして。
龍神録プログラミングの館12を参考にクラス化しようとしたのですが、そこで詰まってしまいました。
ゲームプログラミングとは直接関係なく、またC++の内容になってしまうのですが、ご回答頂けたらと思い書き込ませていただきした。

class A{
public:
	static void pat01(int i){}
	static void (*p)(int);
};
void (A::*p)(int) = &A::pat01;
pat01関数は龍神録プログラミングの館12にあるenemy_pattern~関数です。
と、こんな感じでクラスにまとめてみようと思ったのですが、関数ポインタのメンバ変数(?)がちゃんと定義されないみたいなんです。
私的には「void (A::*p)(int) = &A::pat01;」で定義しているつもりなのですが、コンパイラ的にはどうやらグローバルなメンバ関数ポインタと解釈しているようです。

というわけで、どう書いたらちゃんと定義されるのでしょうか?
どうかよろしくお願いします。

Re:関数ポインタについて質問

Posted: 2009年3月18日(水) 12:26
by SCI
void (*A::p)(int) = &A::pat01;
にしてみてください。

Re:関数ポインタについて質問

Posted: 2009年3月18日(水) 12:59
by akio
SCIさんありがとうございます、解決しました。
なるほど、おそらくクラス名::変数名で1セットと考えればいいのですね。

さて、需要はないような気がしますが一応コードを載せておきますね。
class A{
public:
	static void (*p[/url])(int);
private:
	static void pat01(int i){}
	static void pat02(int i){}
	static void pat03(int i){}

	const static int MAX = 10;
};
void (*A::p[MAX])(int) = {
	&A::pat01,&A::pat02,&A::pat03,
};

void main(){
	A a;
	(a.p[0])(0);
}