我有一个'MyClass'类,其中包含存储在std::map
s中的一些数据。标准映射包含指向对象的指针,例如
private:
std::map<int,Object*> m_data;
我想将数据暴露给外界但我不希望其他类/函数能够修改(i)映射m_data
或(ii)值所指向的对象m_data
。我想要一些假设的函数,比如说getDataBegin()
,它返回一个迭代器,而不是具有上述属性的数据。例如,我希望以下伪代码示例失败:
iterator_type itr = myclass.getDataBegin();
erase(itr); // not allowed because we cannot modify m_data;
itr.second = NULL; // not allowed to change content of m_data (falls under first rule)
itr.second->methodWithSideEffect(); // not allowed because changes content of object pointed to.
简而言之,您可以说我是在对某些成员数据进行只读访问之后。这有可能以一种很好的方式,如果是这样的话,我怎么能这样做呢?
答案 0 :(得分:2)
尝试展示地图transform_iterator
周围的加注const_iterator
。转换函数应该类似于
[](const pair<int, object*>& x)
{
return make_pair(x.first, const_cast<const object*>(x.second));
}
答案 1 :(得分:0)
返回一个const_iterator,const_iterator允许只读访问。
std::map<int,Object*>::const_iterator const getDataBegin();