次の設計上の問題があります
。2Resource
種類のアクセサがあります。
- 1つはそれを変更することです(それを呼びましょう
Access
) - 1つはconstのようなアクセス用です(これを呼びましょう
Const_access
)が、c1 = c2と言うと、c1がc2にアクセスします。
それが大きいことを考えるとResource
、私は次のコピーメカニズムを達成する必要があります。
Access->Access: deep copy
Access->Const_access: deep copy
Const_access->Access: deep copy
Const_access->Const_access: shallow copy
の関数を正確に使用できるように書くことを目指してAccess
います。私の現在の実装には欠陥があり、以下を使用しています。Const_access
const
Access
class Access {
public:
Access(const Access&); // deep copy
void method(const Access&);
void const_method() const;
protected:
Resource res;
};
class Const_access : public Access{
private:
void method(); // only declaration
public:
Const_access(const Const_accesss&); // shallow copy
explicit Const_access(const Access&); // deep copy
};
しかし、ここでConst_access ca; ca.Access::method()
はまだ機能し、非定数アクセサーを手動で隠す必要があります。保護された継承またはプライベート継承を試しましたが、それAccess&
を処理するための柔軟性が妨げられていConst_Access&
ます。
この問題の正しい解決策は何でしょうか?