申し訳ありませんが、ひどく定義されたタイトルです。私が何を意味するか:オブジェクトから親オブジェクトの親に効率的にアクセスするにはどうすればいいですか?
(ところで私は、ゲームエンジンに取り組んでいます、そしてAはシーンあり、Bはゲームがオブジェクトであり、Cは、コンポーネント)私は3つのクラスを持っている
:A、B、C
- AはBを含み、Bは、C
- Aを含み、Bは、お互いへの参照を有します。
- BおよびCは、互いに参照を有する。
(AはフォワードBのヘッダにdeclarated、及びBの実装に含まれている)
はこのようなものだ:< - > B < - > C
私の状況はこれです:
私はCのAメソッドを使用したい(別のBなどを追加するようにメインコンテナに伝えるように)
〜私は、親オブジェクトの親でメソッドを呼び出す再利用可能な関数を作りたいと思います。
たとえば、Cの派生クラスでは、CがどのようにAに到達するか気にする必要はありません。ちょうどCのReach-A-and-do-somethingメソッドを呼び出します。
私の質問は1つが、私が使用する必要があり、なぜするものである(以上1がある?):Cで
:GetB()下駄()doSomethingの(。。 )
CのDoSomething()は、AのDoSomethingを呼び出すBのDoSomething()を呼び出します。
最初のものは私にはよりよい見えるが、Cの実装で私はAだけ前進をdeclaratedさBのヘッダを含みます。だから私は明示的にC.でそれを含めず Aのメソッドを使用することはできませんは(これは悪い習慣です、または私はちょうどそれを含める必要があります?)
秒1 大きなオーバーヘッドを持っています。 AのXYメソッドを使用したい場合は、AのXYを呼び出すBのXYメソッドを作成する必要があり、BのXYを呼び出すCのXYメソッドを作成する必要があります。
したがって、下位要素から階層内の上位要素に到達する方法はわかりません。
これに最適な解決策は何ですか?Cにおいて
CファイルにAのヘッダーファイルを追加すると競合が発生しますか? –
'GetB()。GetA()。DoSomething()'が良いと思われます。 CにAを含めることができます。定義と宣言が分離して含まれていることを確認してください。もう一つのオプションは、 'std :: functional'を使ってAの関数でBを初期化し、Cの' std :: functional'変数にもコピーして、Cが 'my_std_functional()'を呼び出せるようにすることです。 A.の何かが – wally
それは正常に動作します。 「定義と宣言は分離して含まれています」についての詳細を教えてください。 すべてのクラスが異なるスコープにある場合、それは問題ありませんか? – Tudvari