Tôi đang tạo một lớp C++ 11 tạo ra một lượng lớn dữ liệu. Dữ liệu đó hiện đến từ một cơ sở dữ liệu và nó không thể hoàn toàn phù hợp với bộ nhớ. Tôi muốn cung cấp cho người dùng một trình lặp có hoạt động giống như các trình lặp STL thông thường, nhưng điều đó sẽ rất lười. Chính xác hơn, tôi sẽ có thể làm một việc như thế:Làm thế nào tôi có thể tạo trình vòng lặp lười biếng của riêng mình?
for (auto& item : big_bunch_of_data) {
do_stuff_with(item);
}
Với mục được lấy từ cơ sở dữ liệu chỉ tại mỗi lần lặp. Nếu tôi đúng, cú pháp mới này là đường cho
for (stuff::iterator it = big_bunch_of_data.begin();it != big_bunch_of_data.end();it++) {
do_stuff_with(*it);
}
Liệu nó có nghĩa là bằng cách cung cấp begin
, end
và operator++
, tôi có thể có hành vi mong muốn? Và, những phương pháp này phải làm gì? Ý tôi là, tôi có thể làm cho họ lười biếng mà không phá vỡ công cụ?
_ "Dữ liệu đó xuất phát từ một cơ sở dữ liệu và không thể hoàn toàn phù hợp với bộ nhớ", vì vậy, không biết cơ sở dữ liệu của bạn khó đưa ra lời khuyên tốt hơn ... nhưng hãy nhớ rằng nhiều cơ sở dữ liệu SQL cung cấp các cơ chế lặp nội bộ của riêng chúng dạng _cursors_ có thể được sử dụng cho bạn ở đây. – Rook
Tôi đang sử dụng sqlite, nhưng điều đó có thể thay đổi trong tương lai và tôi không muốn để lộ con trỏ thô tới người dùng mã của tôi, đó là lý do tôi cố gắng đóng gói nó khá tốt (và có, đã lười) API. – Fabien