実行時に、使用する上位レベルのAPIを決定し、多くの抽象クラスを持ち、上位レベルのAPIごとに派生したクラスとコンテキストクラスこれは(例えば)関数を使用してジョブの正しい派生クラス、と私を提供しています、今の質問は、それはコードがあまり醜いにすることができるような多態性と新しい演算子[C++]
Mesh* genMesh(data d) { if(m_useA_API) return new A_mesh(d); else return B_mesh(d); }
何かありますか?コンテキストクラス内のメソッドを使用する代わりに、適切な派生クラスインスタンスを返すために基本クラスのnew演算子をオーバーライドできますか?
そうでない場合は、いくつかの解決策はありますか?
TL; DRは、これは私が
Mesh* m = new Mesh(data); // and the base class decides which derived class to use instead of the Context class.
感謝をしたいと思いますものです。
新しい演算子は、生の記憶域割り当て用です。ファクトリ関数のフックではありません。 – StoryTeller
はい、私は助けのためにstackoverflowに来て、新しいメモリブロックを返します、私はこの問題の解決策があるかどうかを探しています。 – ABOODYFJ
あなたの質問に対する解決策はありません。ファクトリをより効果的に実装するためのさまざまなアプローチや設計パターンがあります。しかし、 'Mesh * m = new Mesh(data)'が 'Mesh'から派生したクラスのインスタンスを指し示す' m'をもたらす解決策はありません。定義上、 'new'式は' Mesh'のインスタンスを生成し、派生クラスのインスタンスは生成しません。 – Peter