[英]How to modify a private array without giving too much freedom?
理想的解决方案是能够给出的一个实例A a
和的处理程序指定的唯一实例B
归a
的,但不必超过该总控制B
。
我建议在数组内使用一个简单的索引:
class A
{
Array _array;
public:
// ctr, operator=, ...
const B& operator[](std::size_t index) const { return _array[index]; }
B& operator[](std::size_t index) { return _array[index]; } // if necessary
};
Ou还可以为此数组定义一个迭代器,或者返回A::_array::const_iterator
。 可能性是无限的,最好的选择取决于您的实际约束。
如果确实必须使用动态分配,但希望提供对B的引用,则可以执行以下操作:
struct B {};
struct A
{
B& operator[](size_t i) {
return *_bs[i];
}
const B& operator[](size_t i) const {
return *_bs[i];
}
std::size_t size() const {
return _bs.size();
}
private:
std::vector<std::unique_ptr<B>> _bs;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.