【发布时间】:2018-06-01 19:24:45
【问题描述】:
如果我希望自定义容器类通过类似迭代器的对象(实际上充当容器中某些数据的包装器)访问其数据,并且我希望能够同时获得 const 和非 const类迭代器对象,一个只允许读,一个读写,所以我要实现两个不同的类迭代器对象;一个只允许读取,一个允许读写,或者我可以将此功能包装在一个对象中。
问题是我必须按值返回这个对象,但我不能返回一个不能直接放入非 const 变量中的按值对象
const accessor container::getConstAccessor(){/**/}
被滥用
accessor a=myContainer.getConstAccessor(); //effectively giving me a non const
我能看到的唯一解决方案是拥有两个访问器类/结构。一种作用为 const,另一种作用为 readWrite,无论它们是在 const 还是非 const 变量中。
这可能模拟了一个 constIterator 和迭代器,但这真的需要吗?你不能制作 one 访问器并从容器返回一个 const 或非 const 版本吗?
我尝试改写这个问题几次,以使其最笼统,但如果它有意义,我并不完全确定。我希望是的。
【问题讨论】:
-
如果你让它不可复制,就不能从 const 中获取非 const 实例(讨厌的
const_cast除外) -
关于为什么 STL 类(例如
std::vector)将const_iterator和iterator实现为两个不同的类。
标签: c++ iterator constants const-iterator