読者です 読者をやめる 読者になる 読者になる

どうして大域的アクセスが無ければ困るのか?

Singletonの続き。:-[
要するに
GamePadを大域的アクセス可能なクラスとして扱いたい理由としては

class Character
{
public:
    Character(){}
    virtual ~Character(){}
    virtual void execute() = 0;
};

class Player : public Character
{
public:
    Player(){};
    virtual ~Player(){};
    virtual void execute(){
        
    }
};

なんてクラスがある場合、
PlayerクラスではGamePadを扱いたい筈。
メニュなんかでもそうだけれど、
入力を受け取りたい箇所というのは幾つもある。

この場合、大域的アクセスにしてしまえば何も考えずに済む。
でも、ちょっと待った。

別にPlayerクラスがGamePadクラスをCompositionで良いんじゃない?
(DIでも良いケド)
要するに、

class Player : public Character
{
public:
    Player(){};
    virtual ~Player(){};
    virtual void execute(){
        if (gamePad.isPushButton(GamePad::PAD_A)) {
            // ...
        }
    }
private:
    GamePad gamePad;
};

とする。
GamePadは複数のインスタンスとして存在するが
実際には複数のGamePadが1つのGamePadImplなインスタンスからデータを受け取って、
単なるインターフェイスとして機能すれば良い。

そんなことはないかしらん?