Ho due domande e mezzo strettamente correlate. Dato un tipo di iteratore STL passato come parametro del modello:Verifica/modifica iteratore "costanza"
- Come determinare se il tipo corrisponde a un iteratore const o non const?
- In alternativa a 1., come imporre (utilizzando
enable_if
s per esempio) che questo tipo corrisponde a un iteratore non const? Come ottenere la versione costante dell'iteratore da quello non costante (e vice versa)?[Nota: risposta in this post; non a caso, non puoi. ]
Da dove viene questa domanda viene da:
Ho scritto una piccola classe per facilitare aritmetiche/operatori relazionali/algebriche su vettori (dal vettore intendo dati di dimensione fissa 1D, non il Vettori STL). Invece di imporre un contenitore di dati specifico, ho definito un'interfaccia e derivato diversi contenitori possibili che fondamentalmente "avvolgono" vari modi di memorizzazione dei dati. Uno di questi contenitori è un wrapper per gli iteratori di STL e ho qualche problema con esso.
Si potrebbe iniziare con ['std :: is_const'] (http://en.cppreference.com/w/cpp/types/is_const). –
BoBTFish
@BoBTFish Ho provato ma non funziona. 'const_iterator' e' const iterator' sono due cose diverse. Prova questo: http://pastebin.com/kKQEQthj – Sheljohn
@BoBTFish Spiacente, hai modificato il tuo commento? Potrei giurare che non ho visto il 'decltype (* it)' quando ho postato il mio ultimo commento .. Avresti ragione anch'io con questo suppongo :) – Sheljohn