グラフィック ライブラリの一部として quadtree クラスを作成していますが、設計上の問題に直面しています。主な目標は、ライブラリのユーザーが独自のノード タイプでクワッドツリーを簡単に拡張できるようにすることです。各ノードには、その 4 つの子ノードの最初のノードへのポインターがあります。プロトタイプ パターンを使用して、親ノード (実際の型はライブラリに認識されません) を分割するときに 4 回「複製」します。ノードクラスは次のとおりです。
class CNode {
public:
virtual CNode* clone();
protected:
CNode* pChilds;
}
ライブラリのユーザーは、独自のノードを定義し、traverse メソッドを追加できます。
class MyNode : public CNode {
public:
virtual CNode* clone() {
return new MyNode;
}
void myTraverse() {
if(pChilds[0] != nullptr)
static_cast<MyNode*>(pChilds[0])->traverse();
}
}
ご覧のとおり、基本クラスから派生クラスへのキャストを行う必要があります。別の方法として、四分木に関連するすべてのクラス テンプレートを作成することもできますが、実際にはそうしたくありません。ユースブーストも使えません。それに加えて、クアッドツリーはパフォーマンスに重要なコンポーネントであり、可能な限り高速に実行する必要があるため、RTTI または動的キャストを使用した類似のソリューションは遅くなります!
タイプセーフを追加しながら static_cast の速度を維持する可能性はありますか? (四分木には単一タイプのノードのみが含まれます)。