c – 具有可变内容的不可变容器
故事开始于我以为很简单的事情:
我需要设计一个使用一些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 乍一看,似乎一个const容器会做.但是当然,您只能在const容器上使用const迭代器,并且无法更改内容. 乍看之下,像专门的容器或迭代器这样的东西可以想到.我可能会结束这一点. 那么,我的想法是“有人一定已经做到了!”或者“一个优雅,通用的解决方案必须存在!”我在这里问我的第一个问题: 如何将标准容器设计/转换成具有可变内容的不可变容器? 我正在努力,但我觉得有人会说“嘿,我每次都这样做,很容易,看!”,所以我问… 感谢您提供任何提示,建议或精彩的通用方式来做到这一点:) 编辑: 经过一些实验,我最终得到了处理一些特别装饰的智能指针的标准容器.它接近尼古拉回答. 可变元素的不可变容器的想法不是一个杀人的概念,请参阅Oli回答中的有趣的注释. 当然,一个特定的迭代器的想法是正确的,但是似乎并不实际,因为我需要适应任何类型的容器. 感谢大家的帮助. 解决方法
最简单的选项可能是指针的标准STL容器,因为常量不传播到实际对象.一个问题是,STL不会清理您分配的任何堆内存.看看
Boost Pointer Container Library或
smart pointers.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |