私は現在、脳のおならに苦しんでいます。以前にこれを行ったことがありますが、正確な構文を思い出せず、当時別の会社で働いていたため、書いたコードを見ることができません。私はこの取り決めを持っています:
class P
{
// stuff
};
class PW : public P
{
// more stuff
};
class PR : public P
{
// more stuff
};
class C
{
public:
P GetP() const { return p; }
private:
P p;
};
// ...
P p = c.GetP( ); // valid
PW p = c.GetP( ); // invalid
PR p = c.GetP( ); // invalid
// ...
ここで、P を PW および PR と交換可能にしたいと考えています (したがって、PW と PR は交換可能です)。おそらくキャストを回避できますが、このコードの変更は、このモジュールだけでかなりの回数発生しています。私はそれがオペレーターであると確信していますが、私の人生では何を思い出せません。
最小限のコードで PW および PR と交換可能にするにはどうすればよいですか?
更新:もう少し明確にするために。P は Project を表し、R と W はそれぞれ Reader と Writer を表します。Reader が持っているのは読み込みのためのコードだけです - 変数はなく、Writer は単に Write のためのコードを持っています。読み取りセクションと書き込みセクションには、プロジェクト ファイルの操作であるプロジェクトの本当の関心事ではないさまざまなマネージャー クラスとダイアログがあるため、分離する必要があります。
更新: P と PW のメソッドを呼び出せるようにする必要もあります。したがって、P にメソッド a() があり、PW がメソッド呼び出し b() である場合、次のことができます。
PW p = c.GetP();
p.a();
p.b();
基本的には、変換を透過的にすることです。