2016-11-08 20 views
6

Thực tiễn tốt nhất để tránh trùng lặp mã khi triển khai các cặp lớp như iteratorconst_iterator hoặc tương tự như thế nào?Cách thực hành tốt nhất để tránh trùng lặp mã trong khi triển khai các lớp lặp và lớp const_iterator

  • Bạn có thường triển khai trình vòng lặp về const_iterator bằng nhiều const_casts không?
  • Có sử dụng một số loại đặc điểm lớp và kết thúc định nghĩa cả trình lặp và bộ tách tín hiệu làm các phiên âm khác nhau của một mẫu chung?

Điều này dường như là một vấn đề đủ phổ biến để có giải pháp kinh điển nhưng tôi đã không tìm thấy bất kỳ bài viết nào dành riêng cho điều đó.

+0

Xin lỗi, quá rộng. Nhiều cách tiếp cận khác nhau. Di sản. Mẫu. Không có "thực hành tốt nhất" theo thỏa thuận chung. Mỗi trường hợp cá nhân khác nhau. –

+0

Tôi thích một lớp mẫu được parametrized bởi 'value_type',' pointer_type', 'reference_type'. Ví dụ: 'template class CustomIterator {};' 'typedef CustomIterator iterator_type;' 'typedef CustomIterator const_iterator_type;' –

+1

http://stackoverflow.com/questions/2150192/how- để tránh-mã-trùng lặp-triển khai-const-và-phi-const-iterators –

Trả lời

2

Tôi không có bất kỳ kinh nghiệm nào với việc triển khai trình lặp, mặc dù tôi nghĩ điều này tương tự như các dự án khác. Refactor code chung vv

Nhìn vào GNU libstdc++'s thi hành std::vector::iterator

#include <bits/stl_iterator_base_funcs.h> 
// ... 
template ... class vector : ... { 
    typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator; 
    typedef __gnu_cxx::__normal_iterator<const_pointer, vector> const_iterator; 
}; 
Các vấn đề liên quan