Singletonとんとん。
で、GamePadなら、
class GamePad { public: enum Button { PAD_A, PAD_B, }; private: class GamePadImpl { public: GamePadImpl(){}; virtual ~GamePadImpl(){}; bool isPushButton(Button b) { return true; } void update(){} }; static GamePadImpl gamePadImpl; public: static void update() { gamePadImpl.update(); } bool isPushButton( Button b ) { return gamePadImpl.isPushButton(b); } };
みたいな感じにする。
勿論、Repeat(繰り返し入力)やらTrigger(押された瞬間)やRelease(離された瞬間)などに対応するため、
必ず単一のインスタンスに対するアップデートメソッド、
GamePad::update();
をどこか(恐らくゲームループ中)で呼び出す必要はあるけれど、
これは得に問題がない筈。
グローバル変数「もどき」より良いと考えているけれど、どうだろうか。
勿論、GamePadImplはprivateなので
new GamePad::GamePadImpl();
なんてことはできない。