C++でStateパターンを使ったキャラクターの制御をしているのですが、StateManagerクラス(Player本体クラス等)とStateクラス(Attackクラス等)のクラス間でStateManager側のprivateを含むメンバにアクセスできるようにしたいと思っています。
現在はPlayerMemberみたいなメンバのポインタをいれた構造体を引数で各Stateに渡していますが、これだと一々メンバが増えたり減ったりするたびに、構造体も書き換えで面倒なのでStateをStateManagerの「friendクラス」または「Innerクラス」として扱おうかと思っています。
イメージ的にInnerで綺麗にかけたらいいな~と思うのですが、InnerだとStateManagerクラス内に書かなくてはならなく、ヘッダのファイル分割ができないと思うのですが、1つのヘッダファイルがクッソ長くなってしまうのがどうしても許せません。
解決方法はありませんか?
イメージはこんな感じです。
~~~~~Outer.h~~~~~~~~
class Inner; //前方宣言
class Outer
{
public:
Outer();
private:
int m_outerMember;
Inner m_Inner;
};
~~~~~~~~Inner.h~~~~~~~
//ネームスペースみたいに
class Outer {
class Inner
{
public:
Inner(Outer& outer)
private:
Outer& m_outer;
};
};
ステートパターン時のスコープの問題とファイル分割について
Re: ステートパターン時のスコープの問題とファイル分割について
>InnerだとStateManagerクラス内に書かなくてはならなく、ヘッダのファイル分割ができないと思うのですが、1つのヘッダファイルがクッソ長くなってしまうのがどうしても許せません。
ヘッダを分けることはできるのではないでしょうか.
ヘッダを分けることはできるのではないでしょうか.
//Manager.h
class Manager
{
public:
Manager() : m_PrivateData(600) {}
public:
class Inner;
private:
int m_PrivateData;
};