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

标签 c++ oop std

我有一个“MyClass”类,它包含一些存储在 std::map 中的数据。标准 map 包含指向对象的指针,例如

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.

简而言之,您可以说我正在对某些成员数据进行只读访问。这完全有可能以一种很好的方式进行吗?如果可以,那我该怎么做呢?

最佳答案

尝试在 map 的 const_iterator 周围公开一个增强 transform_iterator。转换函数应该是这样的

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

关于c++ - 通过只读迭代器公开成员数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7610283/

相关文章:

c++ - 在 Windows 控制台中获取按键

c# - 将多维数组从托管代码传递到非托管代码

python - 创建一个类,通过读取多个 CSV 文件创建字典 - Python

c++ - 使用 ostream_iterator 将映射复制到文件中

c++ - 为什么 std::hash 不能保证是确定性的?

c++ - 在 Qt 中 QFile::copy(source, dest) 的实现有时是错误的吗?

c++ - 更改重载运算符的签名

c++ - 父类有一个虚函数。父类中必须要有虚析构函数吗?

c - 卢阿 :new from C API

c++ - GCC 标准库 XCode 4.5