Tôi đang cố gắng tìm cách chung để truy cập tập hợp các vùng chứa. Tôi có một vector và danh sách tiêu chuẩn ngoài một danh sách tùy chỉnh khác.Trình biến đổi chung
Danh sách tùy chỉnh xác định trình lặp;
class Iterator: public std::iterator<std::forward_iterator_tag, T> {
// ...
}
Iterator begin() {
return (Iterator(root));
}
Iterator end() {
return (Iterator(NULL));
}
với các toán tử thích hợp bị quá tải.
Lý tưởng nhất, tôi muốn thực hiện việc này;
class Foo {
public:
Foo() {
std::list<int> x;
std::vector<int> y;
custom_list<int> z;
iter = x.begin(); // OR
iter = y.begin(); // OR
iter = z.begin();
// ...
};
private:
std::iterator<int> iter;
};
Nhưng rõ ràng đây là tất cả các trình lặp của các loại khác nhau. Tôi có thể giả định tất cả các thùng chứa đều có cùng loại.
Có cách nào thanh lịch để giải quyết vấn đề này không?
Thomas Becker (tác giả của liên kết thứ hai ở trên) có bài viết dài hơn tuyệt vời: http://www.artima.com/cppsource/type_erasure.html – Adrian
@Adrian - bài viết đó rất xuất sắc: D cảm ơn vì đã chia sẻ nó ! – nevelis