お前らが暴れ始める前に、ここに来い。はい、実際には友情が継承されないように意図されていることを認識しています。それに似たものを取得する方法を見つけようとしています. これが私の状況です(実際のコードはなく、理論のみです)。私は単純な抽象ゲーム エンジン フレームワークに取り組んでいます。最初は、オブジェクト型を分割する単純なオブジェクト指向/継承アプローチを行うつもりでした。さて、紙の上では、エンティティを取り、それらを物理、アニメーション、不動のシナリオ、およびそのすべてのサブカテゴリのサブカテゴリに分割することは、非常に素晴らしいように聞こえました。しかし、これは危険であり、まったく異なるオブジェクトの混乱と、コンパイラーの代わりに強制する必要があるものを見逃すと簡単に問題を引き起こす可能性のあるかなりの危険なキャストで作業するのが困難になりました。
そこで、オブジェクトを抽象的に表現する別の方法を提案します。すべてのエンティティの派生元であるエンティティ クラスが 1 つ存在することを望みます。このエンティティ クラスには、ベクトル、またはその他の動的に拡張可能な最も効果的な配列が含まれます。これには、ビヘイビアと呼ばれるオブジェクトが含まれます。ビヘイビアーは指定された時間が経過すると更新され、指定されたオブジェクトのメンバーに影響を与えます。下記は用例です。
class Force : behavior;
/*this would be a force, added to the behavior list and apply a constant
acceleration vector to the object until removed from the behavior list. (or
it's lifetime is exhausted) */
class attackThought : behavior;
/* For an ai, this would change how it reacts to a scenario by replacing or
even adding actions that it should perform given the change in position
or environment at update.*/
class animation : behavior;
/* You could create an animation, specify the animation that it is to perform,
add it to the behavior list, and during the time update, it will adjust the
vertex buffer accordingly, removing itself from the list when the animation
is done */
問題は、エンティティ オブジェクトのプライベート メンバー (オブジェクトの頂点バッファーなど) をほとんど変更するさまざまな方法で仮想関数の一部を実装する基本動作クラスから派生させたいことです。基本的なエンティティ コードをあまり操作する必要がないようにして、(ほとんどの場合) 他のオブジェクトと同様に処理できるようにしたいのですが、それらの動作を完全に操作/派生可能にしたいだけです。このシステムを C++ で動作させる方法を誰か考えてくれませんか?
ところで、友情という意味で、私はプライベートメンバーに影響を与える可能性のある派生エンティティクラスと友達になる基本クラスの動作を意味します。たとえば、エンティティから派生するモデル クラスがあり、アニメーションと呼ばれる動作の派生クラスをフレンドシップし、その後何らかの理由でクラスをモデルからより具体的なタイプのオブジェクトに派生させたいとします。アニメーション オブジェクトは、この新しいモデル派生オブジェクトのプライベート メンバーを操作します。
それともできますか?このアプローチがどれほど実行可能かについての意見も歓迎します (実際に批判が含まれている限り)。