cocos2d-x v3 (というかc++) 関数ポインタのテーブルを作って、for文で「れんぞくま」する
参考にさせてもらった記事です。
ぶっちゃけ私の理解度は低いので、正確な記述・理解を求める方は上記リンクへGO!
ただ、「こんなこともできるんか!」と感動してしまったので、記録に残しておくことにします。
例えばメソッドが5つあったとして。
// HelloWorld.cppとか void HelloWorld::Firaga() //ファイガ { } void HelloWorld::blizzaga() //ブリザガ { } void HelloWorld::thundaga() //サンダガ { } void HelloWorld::meteor() //メテオ { } void HelloWorld::artema() //アルテマ { }
これを関数ポインタのテーブルMagicMenuにしちゃいます。
//これも同じHelloWorld.cpp内 void(HelloWorld::* MagicMenu[])() { &HelloWorld::firaga, &HelloWorld::blizzaga, &HelloWorld::thundaga, &HelloWorld::meteor, &HelloWorld::artema };
ほいでもって、こうだ!
// HelloWorld.cpp for (int i = 0; i < 5; i ++) { (this->*MagicMenu[i])(); // ファイガ! ブリザガ! サンダガ! メテオにアルテマ! }
ほぼワンライナーで乱れ打ちが可能であります。
これはちょっと感動的。プログラムってスゲー!
ただ、privateメソッドの場合など、
「ようやくc++で簡単なプログラムを組めるようになってきた」
くらいの雑魚(私です)には、大変にとっつきにくい構文であります。
これを継承して、とか考えるだけで頭が痛くなりそうです。
でも、ここで挙げたサンプル程度の使い方でも、
「他クラスから順番に呼び出したいメソッドが大量にある」場合など、
コードを書く量は激減するはず。
それにウィザード気分が味わえるので、なかなか楽しいのではないでしょうか。
関数ポインタのテーブルのサンプルでした。