Dường như bộ điều hợp vòng lặp reverse_iterator
định nghĩa gấp đôi hầu hết các loại lồng nhau của nó. Cụ thể, nó kế thừa công khai từ std::iterator
hiển thị iterator_category
, value_type
, difference_type
, pointer
và reference
. Ngoại trừ iterator_category
và value_type
, tất cả đều rõ ràng là typedef
'được chỉnh sửa lại trong định nghĩa lớp học.Tại sao reverse_iterator lại định nghĩa gấp đôi các kiểu lồng nhau của nó?
24.5.1.1 Lớp mẫu reverse_iterator [reverse.iterator]
namespace std {
template <class Iterator>
class reverse_iterator : public
iterator<typename iterator_traits<Iterator>::iterator_category,
typename iterator_traits<Iterator>::value_type,
typename iterator_traits<Iterator>::difference_type,
typename iterator_traits<Iterator>::pointer,
typename iterator_traits<Iterator>::reference> {
public:
typedef Iterator iterator_type;
typedef typename iterator_traits<Iterator>::difference_type difference_type;
typedef typename iterator_traits<Iterator>::reference reference;
typedef typename iterator_traits<Iterator>::pointer pointer;
// ... rest of the class
};
Câu hỏi: tại sao định nghĩa lặp đi lặp lại? Đây có phải chỉ dành cho mục đích giải trình, hoặc có nhiều hơn không? Và tại sao không xác định lại iterator_category
và value_type
?
Nó cũng không xác định lại 'value_type'. Dù sao, câu hỏi này sẽ sớm trở thành tranh luận, nhờ vào [LWG 2438] (http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2438). –
@ T.C. cảm ơn vì đã đào bới DR đó. Tôi cập nhật Q. Nếu bạn làm cho nó một câu trả lời, tôi sẽ chấp nhận. – TemplateRex
Có thể nó phải làm với tra cứu tên phụ thuộc? Các tên được kế thừa từ 'iterator' không hiển thị trong mọi trường hợp, vì nó là một lớp cơ sở phụ thuộc. – dyp