我有以下设计问题:
我有Resource
两种访问器:
- 一种是修改它(我们称之为
Access
) - 一个是用于类似 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&
。
这个问题的正确解决方案是什么?