Tôi có một lớp mà tôi muốn hiển thị danh sách các cấu trúc (chỉ chứa một số số nguyên). Tôi không muốn bên ngoài để sửa đổi các dữ liệu, chỉ cần lặp trên nó và đọc chúng Ví dụ:Làm cho lớp C++ của tôi có thể lặp lại được qua BOOST_FOREACH
struct TestData
{
int x;
int y;
// other data as well
}
class IterableTest
{
public:
// expose TestData here
};
bây giờ trong mã của tôi Tôi muốn sử dụng lớp học của tôi như thế này:
IterableTest test;
BOOST_FOREACH(const TestData& data, test.data())
{
// do something with data
}
Tôi đã đọc bài viết này http://accu.org/index.php/journals/1527 về không gian thành viên. Tuy nhiên, tôi không muốn (hoặc không thể) lưu tất cả TestData trong một vector nội bộ hoặc một cái gì đó. Điều này là do chính lớp đó không sở hữu bộ nhớ, nghĩa là không có vùng chứa cơ bản nào có thể được lớp truy cập trực tiếp. Bản thân lớp có thể truy vấn một thành phần bên ngoài để lấy phần tử tiếp theo, trước đó hoặc thứ i.
Vì vậy, về cơ bản tôi muốn lớp học của tôi cư xử như thể nó có một bộ sưu tập, nhưng trên thực tế nó không có. Bất kỳ ý tưởng nào?
bạn không phải cung cấp chức năng bắt đầu/kết thúc trả về trình lặp thích hợp? – jalf
có, nhưng tôi không có một thùng chứa cơ bản mà có thể cung cấp cho tôi với các iterators – newgre
để viết chúng cho mình. :) Thư viện Boost.Iterator sẽ giúp bạn khởi động và chạy khá nhanh. – jalf