如果我有一个代理模式 ClassA
和代理是 Class PrxA
。问题1
如果我定义了几个函数,那么virtual
那些A
应该被定义为virtual
even inPrxA
吗?
现在如果
Class B : public A
{
///code
}
我相信代理类也应该继承。
Class PrxB : public PrxA {
/// code
}
现在假设这些代理类具有以下规则
- 在 c'tor 中实例化原始类
- 将在内部传递给通过不同内部类的任何引用/指针参数
- 要获取代理类的实际 impl(即
A
从PrxA
我们有一个 impl 存储,它将为我们提供A
fromPrxA
和B
fromPrxB
。
现在有一个类C
将 PrxA 作为其 c'tor 中的引用。
`C::C(PrxA& A): pa(A),a(getImpl(PrxA))
正在初始化的 C 类的本地成员。
PrxA& pa;
A& a;
如果我通过 A,它会很好用。这里没问题。
问题2 当我传递B
给这个类C
时,获得B
impl 的最佳方法是什么(第二个在 C 的 c'tor 中初始化?(注意B
派生自A
)
我可以考虑使用这样的getImpl(A)
东西,但看起来不是一个好的解决方案。
A* getAImpl(PrxA& pa)
{
if (implA(pa) != NULL)
return A;
else
return dynamic_cast<B>(A); // can't do this. since A will be returned but I actually need B
}
如果我需要传递给以 PrxA 作为参考PrxB
的类,我应该在这里采取什么方法?C
除了铸造还有什么方法吗?
如果我们限制为一个构造函数,这里还有一件有趣的事情,我们可以获得 PrxA 或 PrxB 的引用,需要相应地处理这些引用以在初始化程序中获取 impl。我需要知道一个好的方法。