trình lặp tương tự trong điều này và tạo một nghiên cứu thú vị.
Biến lặp const thường là cơ sở cho các biến lặp 'không const', và bạn thường sẽ tìm thấy các phôi kiểu const_cast<>()
hoặc C được sử dụng để loại bỏ const khỏi lớp cơ sở với các trình truy cập ở trẻ.
Edit: Comment đã
Tôi có một iterator zip nơi một const được thừa hưởng từ không const
này thường sẽ là cấu trúc thừa kế sai (nếu bạn nói những gì tôi nghĩ rằng bạn đang có), lý do là trẻ em không nên ít hạn chế hơn cha mẹ.
nói rằng bạn đã có một số thuật toán lấy trình lặp mã zip của mình, liệu có thích hợp để chuyển một trình lặp const tới một biến không?
nếu bạn có vùng chứa const, chỉ có thể yêu cầu nó cho trình lặp const, nhưng sau đó trình biến đổi const bắt nguồn từ trình lặp để bạn chỉ sử dụng các tính năng trên cha mẹ để có quyền truy cập không const.
Dưới đây là một phác thảo nhanh chóng thừa kế gợi ý theo mô hình stl truyền thống
class ConstIterator:
public std::_Bidit< myType, int, const myType *, const mType & >
{
reference operator*() const { return m_p; }
}
class Iterator : public ConstIterator
{
typedef ConstIterator _Mybase;
// overide the types provided by ConstIterator
typedef myType * pointer;
typedef myType & reference;
reference operator*() const
{
return ((reference)**(_Mybase *)this);
}
}
typedef std::reverse_iterator<ConstIterator> ConstReverseIterator;
typedef std::reverse_iterator<Iterator> ReverseIterator;
Nguồn
2010-10-28 21:28:34
Bạn không phải là người đầu tiên: http://stackoverflow.com/questions/856542/elegant-solution-to-duplicate-const-and-non-const-getters –
cảm ơn Cho đến khi chưa đến tìm kiếm của tôi – Steve