Come parte di un team di sviluppatori, volevo garantire che un insieme di funzioni (e operatori) siano implementati sugli iteratori personalizzati che pubblichiamo. L'utilizzo dei tipi di iteratore STL come tipi di base aiuta, tuttavia a causa di alcuni motivi (fuori dal mio controllo) decidiamo di non applicare la compatibilità STL. Gli iteratori sono consumati dalla stessa squadra e da persone in tutta la società.static_assert per garantire il contratto di progettazione
Volevo progettare una classe template che consumasse il tipo iteratore e testasse il contratto di progettazione.
Ad esempio, mi aspetto che un iteratore realizzi un operatore ++, operatore-- e dichiari anche i typedef richiesti.
1> È possibile implementare una tale classe di modello che applica il contratto di progettazione? probabilmente usando static_assert?
2> Se sì, è un buon design?
di riferimento: custom iterator
http: //www.boost.org/doc/libs/1_48_0/libs/type_traits/doc/html/boost_typetraits/category/value_traits/operators.html forse? – BoBTFish
La [bella stampante] (http://stackoverflow.com/q/4850473/596781) ha una classe di tratto C++ 11 per verificare se un tipo ha tipi di iteratore e funzioni 'begin' /' end' che restituiscono quell'iteratore genere. –
@Kerrek Grazie per l'esempio. Ho salvato diverse ore uomo. :) – Ram