【发布时间】:2013-08-15 04:10:58
【问题描述】:
例如,我有一个类继承一个向量
class A : private vector<int>
{
};
这将使vector 中的所有方法在A 类中成为私有方法。我想让vector 中的 const 方法,比如size(),公开;和非 const 方法,例如 push_back(),私有。如何实现?
【问题讨论】:
-
从标准库容器继承不是一个好主意;改用合成。
-
@Beta 请注意,OP 使用的是 private 继承,它更类似于组合,并不意味着可替代性。
-
一个非常简单的解决方案是像
vector<int> const& as_vector() const { return *this; }这样的内部转换。用户可以const_castconstness 离开,但这会违反(隐式)合同。 (同样,C 风格的转换可以通过忽略可访问性将您的A类型转换为vector<int>。)
标签: c++