通过只读迭代器公开成员数据
Expose Member Data Through Read-only Iterator
我有一个类'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.
简而言之,您可以说我想要对某些成员数据进行只读访问。这有可能以一种好的方式实现吗?如果有,我该怎么做呢?
尝试在地图的const_iterator
周围暴露一个boost transform_iterator
。转换函数应该类似于
[](const pair<int, object*>& x)
{
return make_pair(x.first, const_cast<const object*>(x.second));
}
返回const_iterator, const_iterator允许只读访问。
std::map<int,Object*>::const_iterator const getDataBegin();
相关文章:
- 嵌套在类中时无法设置成员数据
- 私有成员数据不可用于公共成员功能
- 我想知道我是否可以将一个类分配给特定的成员数据并创建该类的实例
- 类的成员数据未更新
- 为什么类成员数据必须是静态的才能被模板化类的模板化结构成员访问
- C++:成员不可访问-使用友元函数允许一个类修改另一个类的成员数据
- 如何高效更改向量中所有对象的成员数据?
- constexpr 偏移量,带有指向成员数据的指针
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- C++ 类析构函数删除部分但不是全部成员数据
- 初始化 MFC 中 CFormView 派生类的成员数据
- 覆盖复制/移动分配超载时,我是否需要删除当前的成员数据
- 根据参数设置构造函数的成员数据类型
- 对齐说明符:在类型 / 上 成员数据
- 如何实现ressize()以更改C 中动态成员数据的能力
- C++ 阻止复制成员数据
- 什么是成员数据指针的正确赋值语句
- C++ 在类中使用 strcmp() 处理私有成员数据
- 成员数据在stack实例上覆盖
- 初始化继承的成员数据