プロキシ パターン Class がA
あり、そのプロキシは ClassPrxA
です。質問1
virtual
のようにいくつかの関数を定義した場合、それらは偶数のA
ように定義されるはずですか?virtual
PrxA
今なら
Class B : public A
{
///code
}
プロキシ クラスも継承する必要があると思います。
Class PrxB : public PrxA {
/// code
}
これらのプロキシクラスには次のルールがあると仮定します
- c'tor で元のクラスをインスタンス化する
- 異なる内部クラス間で渡される参照/ポインタ パラメータに対して内部的に渡されます。
- プロキシ クラスの実際の impl を取得するには (つまり、 from から取得
A
するには、 fromとfromPrxA
を提供する impl ストアを用意します。A
PrxA
B
PrxB
C
これで、PrxA を c'tor の参照として受け取るクラスができました。
`C::C(PrxA& A): pa(A),a(getImpl(PrxA))
初期化中のクラス C のローカル メンバー。
PrxA& pa;
A& a;
A を渡すとうまくいきます。ここでは問題ありません。
質問 2B
このクラスに渡すとき、の impl (C の c'tor で初期化された 2 番目)を取得C
する最良の方法は何ですか?B
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
キャスティング以外のアプローチはありますか?
ここでまた興味深いのは、コンストラクターを 1 つに制限すると、イニシャライザーで impl を取得するためにそれに応じて処理する必要がある PrxA または PrxB の参照を取得できることです。私は良いアプローチを知る必要があります。