加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 通过只读迭代器公开成员数据

发布时间:2020-12-16 07:27:16 所属栏目:百科 来源:网络整理
导读:我有一个’MyClass’类,它包含一些存储在std :: maps中的数据.标准地图包含指向对象的指针,例如 private: std::mapint,Object* m_data; 我想将数据暴露给外界但我不希望其他类/函数能够修改(i)map m_data或(ii)m_data中的值所指向的对象.我想要一些假设的函
我有一个’MyClass’类,它包含一些存储在std :: maps中的数据.标准地图包含指向对象的指针,例如

private:
   std::map<int,Object*> m_data;

我想将数据暴露给外界但我不希望其他类/函数能够修改(i)map 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.

简而言之,您可以说我是在对某些成员数据进行只读访问之后.这有可能以一种很好的方式,如果是这样的话,我怎么能这样做呢?

解决方法

尝试在地图的const_iterator周围展开一个boost transform_iterator.转换函数应该是这样的

[](const pair<int,object*>& x) 
{
    return make_pair(x.first,const_cast<const object*>(x.second));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读