Tôi có một lớp như hình dưới đây:Cho phép truy cập vào các đối tượng chứa trong C++
class Foo {
private:
std::map<std::string, Bar*> bars_by_name;
std::map<std::string, Baz*> bazs_by_name;
};
Bây giờ tôi muốn cho phép người dùng truy cập cả hai bộ sưu tập nhưng ẩn chi tiết thực hiện mà tôi đang lưu trữ đối tượng vào std :: maps. Thay vào đó, tôi muốn có các hàm thành viên trả về, ví dụ: const iterators cho các bộ sưu tập và thậm chí có thể là một iterator tùy chỉnh trả về các đối tượng từ cả hai bộ sưu tập, vì Bar và Baz thuộc cùng một hệ thống phân cấp lớp. Xem xét phong cách, những gì sẽ là cách thích hợp để làm điều này trong C + +? Trong Java, tôi có thể đặt kiểu trả về của phương thức thành Iterable hoặc bọc bộ sưu tập thành một unCodifiableCollection.
Nếu bạn sử dụng một cái gì đó như ['any_iterator'] (http://thbecker.net/free_software_utilities/type_erasure_for_cpp_iterators/any_iterator.html), bạn có thể ẩn loại cơ bản mà không bị rò rỉ chi tiết. Bạn có thể sử dụng một cái gì đó như transform_iterator của Boost hoặc zip_iterator như một trung gian quá mà không sử dụng được bất kỳ khôn ngoan hơn. – Flexo