私はこのトピックの調査に 1 日を費やしました。そのため、このトピックに関するいくつかの知識が散在している状態で、この質問をお送りしました。私が達成しようとしていることを説明させてください。差し迫った質問に対する解決策、または問題に完全に取り組む別の方法を提案できるかもしれません.
XAMLファイルがWPFでどのように機能するかに関連する何かを模倣しようとしています。ここでは、本質的に XML 定義からオブジェクト ツリーをインスタンス化しています。これが正しくない場合は、お知らせください。それ以外の場合、この問題はWPF、C#、または管理されているものとは関係ありません-同様の概念であるため、私はそれについてのみ言及します..
そのため、XMLパーサー クラスは既に作成しており、 ObjectNodeオブジェクトに基づいてノード ツリーを生成しています。ObjectNodeオブジェクトはtypeと呼ばれる文字列値を保持し、子ObjectNodeオブジェクトのstd::vectorを持ちます。
次のステップは、 ObjectNodeツリーのデータに基づいてオブジェクトのツリーをインスタンス化することです。同じObjectNodeツリーが複数回インスタンス化されるか、必要に応じて遅延される可能性があるため、この中間ObjectNodeツリーが必要です。作成されるオブジェクトのツリーは、ツリー内のノードが共通の基本クラスの子孫になるようなものです。これは、今のところMyBaseとして参照できます。リーフ ノードは任意の型にすることができ、必ずしもMyBaseから派生させる必要はありません。
これをさらに困難にするために、ツリーに含まれる可能性のあるオブジェクトのタイプがわからないため、新しいタイプをファクトリに登録できるようにする必要があります。
ブーストの工場を認識しています。彼らのドキュメントには、このページに興味深い小さなデザイン パラグラフがあります。
o コンストラクターに転送されるいくつかの引数を取るファクトリが必要な場合があります
。 o おそらくスマート ポインターを使用したい
場合があります。 o さまざまな種類のオブジェクトを作成するためにいくつかのメンバー関数が必要な場合があります。
o ポリモーフィック ベースが必ずしも必要ではない場合があります。 o 後でわかるように、ファクトリ基本クラス
はまったく必要ありません
。o
スタック上にオブジェクトを作成するために #new# を使用せずに、単にコンストラクターを呼び出したい場合があります。
カスタマイズされたメモリ管理を使用します。
私はこれをすべて正しく理解していないかもしれませんが、私がやろうとしていることはブーストの工場で達成できると述べているようです. しかし、私が見つけたすべての例は、すべてのオブジェクトが基本型から派生したファクトリを説明しているようです。
これに関するガイダンスは大歓迎です。
御時間ありがとうございます!