タイプ 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 オブジェクトをインスタンス化し、それを属性として保持し、新しいインスタンス用に複製することです)
よろしくお願いします(どんな提案でも大歓迎です)