タイプ A のオブジェクトを生成するクラス (MyFactory) があります (myFactory はインスタンスになります)。ユーザーがクラス A を (たとえば、クラス B に) 拡張し、A の仮想メソッドをオーバーライドできるようにしたいと考えています。
たとえば、 A を拡張したくないユーザー:
A* myObject = myFactoryInstance.createObject();
そして、 A を B で拡張するユーザー向けの現在のトリック:
B* myObjectPrepare = new B()
myFactoryInstance.setNextObject( myObjectPrepare );
A* myObject = myFactoryInstance.createObject(); // Will look for a "next_object"
/* Here, myObject (which is myObjectPrepare modified by createObject)
methods will dynamically link to B class methods. */
私の目標は、この操作を容易にすることです。
.
私は試した :
template <class T>
void MyFactory::set_requests_class() {
new T();
/* I don't want an instance, now. Just memorize class type
at compilation time, and make instances of T along exec
*/
}
(使い方: set_requests_class(); 問題: インスタンスを作りたくない)
それが解決策になる可能性があります:
myFactoryInstance.createObject<YourObjectTypeHere>();
しかし、テンプレート パラメータを必須にしたくありません (属性のデフォルト パラメータは c++11 以降でのみ可能です): A を拡張したくないユーザーのために、非常にシンプルに保ちたいです。同じ理由で、「createObject」署名を変更します。
(私の将来のトリックは、B オブジェクトをインスタンス化し、それを属性として保持し、新しいインスタンス用に複製することです)
よろしくお願いします(どんな提案でも大歓迎です)