我有一個有趣的問題。考慮這個類層次:具體類具體方法
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