我有一个有趣的问题。考虑这个类层次:具体类具体方法
class Base
{
public:
virtual float GetMember(void) const =0;
virtual void SetMember(float p) =0;
};
class ConcreteFoo : public Base
{
public:
ConcreteFoo("foo specific stuff here");
virtual float GetMember(void) const;
virtual void SetMember(float p);
// the problem
void foo_specific_method("arbitrary parameters");
};
Base* DynamicFactory::NewBase(std::string drawable_name);
// it would be used like this
Base* foo = dynamic_factory.NewBase("foo");
我已经离开了DynamicFactory定义以及如何构建器 其注册。 Builder对象与名称 相关联,并将分配Base的具体实现。实际的 实现与shared_ptr处理内存 回收有点复杂,但它们对我的问题并不重要。
ConcreteFoo
具有类特定的方法。但是由于具体实例 是在动态工厂中创建的,因此具体类不可知或者可以访问 ,它们只能在源文件中声明。我如何 foo_specific_method
暴露给Base*
的用户?
我添加了我提出的解决方案作为答案。我已将它们命名为 ,因此您可以在答案中轻松引用它们。
我不只是寻找我原来的解决方案的意见,新的 将不胜感激。
请让你的答案社区维基答案!谢谢。 – strager 2009-02-13 21:54:56
或者,完全删除你的答案。虽然我猜这可能会起作用... – strager 2009-02-13 21:55:41