2016-11-08 13 views
6

iterator ve gibi sınıf çiftlerini uygularken veya benzer bir şekilde kod çoğaltmasını önlemek için en iyi yöntemler nelerdir?Yineleme ve const_iterator sınıfları uygulanırken kod çoğaltmasından kaçınmak için en iyi yöntem

  • Genellikle, birçok const_cast kullanarak const_iterator açısından yineleyici uygular mı?
  • Bir çeşit sınıf sınıfı kullanılıyor mu ve hem yineleyici hem de const_iterator öğesini ortak bir şablonun farklı örneklemeleri olarak tanımlamak mı gerekiyor?

Bu, kanonik bir çözüm bulmak için ortak bir sorun gibi görünüyor ancak buna adanmış herhangi bir makale bulamadım.

+0

uygulanması, çok geniş baktığımızda vb

ortak kod, refactor. Birçok farklı yaklaşımlar. Kalıtım. Şablonlar. Evrensel olarak üzerinde anlaşılan “en iyi uygulama” yoktur. Her bireysel durum değişir. –

+0

"value_type", "pointer_type", "reference_type" ile bir şablon sınıfını tercih ediyorum. Örneğin: 'şablon sınıf CustomIterator {}; ' ' CustomIterator iterator_type Typedef; ' ' Typedef CustomIterator const_iterator_type; ' –

+1

http://stackoverflow.com/questions/2150192/how- to-kaçınmak-kod çoğaltılması-uygulanması-const-ve-const olmayan-yineleyicinızı –

cevap

2

Diğer projelerle benzer olduğunu düşünmeme rağmen, uygulayıcı yineleyicileriyle ilgili herhangi bir deneyimim yok. GNU libstdc++'sstd::vector::iterator Maalesef

#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; 
}; 
İlgili konular