我有一个类(MyFactory),它产生 A 类型的对象。(myFactory 将是一个实例)我想允许用户扩展 A 类(例如到 B 类),并覆盖 A 的虚拟方法。
例如,不想扩展 A 的用户:
A* myObject = myFactoryInstance.createObject();
而我目前对使用 B 扩展 A 的用户的技巧:
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 对象,将其保留为属性并为新实例克隆它)
提前感谢您(任何建议将不胜感激)