ステートパターン時のスコープの問題とファイル分割について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Biginer01

ステートパターン時のスコープの問題とファイル分割について

#1

投稿記事 by Biginer01 » 9年前

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;
};
};

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: ステートパターン時のスコープの問題とファイル分割について

#2

投稿記事 by usao » 9年前

>InnerだとStateManagerクラス内に書かなくてはならなく、ヘッダのファイル分割ができないと思うのですが、1つのヘッダファイルがクッソ長くなってしまうのがどうしても許せません。

ヘッダを分けることはできるのではないでしょうか.

コード:

//Manager.h
class Manager
{
public:
	Manager() : m_PrivateData(600) {}
public:
	class Inner;
private:
	int m_PrivateData;
};

コード:

//Inner.h
#include "Manager.h"

class Manager::Inner
{
public:
	Inner( const Manager &rM ) : m_rManager(rM) {}
public:
	int GetDataOfManager()
	{	return m_rManager.m_PrivateData;	}
private:
	const Manager &m_rManager;
};

閉鎖

“C言語何でも質問掲示板” へ戻る