【发布时间】:2012-06-19 22:37:12
【问题描述】:
我有一个像下面这样的课程:
class Foo {
private:
std::map<std::string, Bar*> bars_by_name;
std::map<std::string, Baz*> bazs_by_name;
};
现在我想允许用户访问这两个集合,但隐藏我将对象存储到 std::maps 的实现细节。相反,我希望有返回的成员函数,例如集合的 const 迭代器,甚至可能是从两个集合返回对象的自定义迭代器,因为 Bar 和 Baz 属于同一个类层次结构。考虑到风格,在 C++ 中执行此操作的正确方法是什么?在 Java 中,我可能会将方法的返回类型设置为 Iterable 或将集合包装到不可修改的Collection 中。
【问题讨论】:
-
如果你使用
any_iterator之类的东西,你可以隐藏底层类型而不会泄露细节。您也可以使用 Boost 的 transform_iterator 或 zip_iterator 作为中介,而不需要更明智的使用。
标签: c++