故事从我认为非常简单的事情开始:
我需要设计一个将使用一些STL容器的类.我需要让类的用户访问这些容器的不可变版本.我不希望用户能够更改容器(push_back()例如,他们不能在列表中),但我希望用户能够更改包含的对象(获取元素back()并对其进行修改):
class Foo
{
public:
// [...]
ImmutableListWithMutableElementsType getImmutableListWithMutableElements();
// [...]
};
// [...]
myList = foo.getImmutableListWithMutableElements();
myElement = myList.back();
myElement.change(42); // OK
// [...]
// myList.push_back(myOtherElement); // Not possible
Run Code Online (Sandbox Code Playgroud)
乍一看,似乎const容器会这样做.但是,当然,您只能在const容器上使用const迭代器,并且无法更改内容.
乍一看,人们会想到像专用容器或迭代器这样的东西.我可能最终会这样做.
然后,我的想法是"有人必须已经做到了!" 或"必须存在优雅,通用的解决方案!" 我在这里问我关于SO的第一个问题:
如何将标准容器设计/转换为具有可变内容的不可变容器?
我正在努力,但我觉得有人会说"嘿,我每次都这样做,很容易,看!",所以我问......
感谢您提供任何提示,建议或精彩的通用方法:)
编辑:
经过一些实验,我最终得到了标准容器,可以处理一些特别装饰的智能指针.它接近尼古拉的回答.
可变元素的不可变容器的概念不是一个杀戮概念,请参阅Oli回答中的有趣注释.
特定迭代器的想法当然是正确的,但它似乎不实用,因为我需要适应任何类型的容器.
感谢大家的帮助.
| 归档时间: |
|
| 查看次数: |
2201 次 |
| 最近记录: |