Esiste una metafunzione f
che associa uno iterator
al corrispondente const_iterator
?Ottenere const_iterator dall'iteratore
I.e. f<std::vector<T>::iterator>::type
dovrebbe produrre std::vector<T>::const_iterator
.
Esiste una metafunzione f
che associa uno iterator
al corrispondente const_iterator
?Ottenere const_iterator dall'iteratore
I.e. f<std::vector<T>::iterator>::type
dovrebbe produrre std::vector<T>::const_iterator
.
Non sono a conoscenza di tale metafunzione.
Non tutti gli iteratori hanno un const_iterator corrispondente. Per esempio. insert_iterator. Quindi una tale metafunzione dovrebbe decidere cosa fare in questi casi.
mi viene in mente qualcosa per un reverse_iterator
: utilizzando la funzione di membro della base
decltype
, si può estrarre il tipo di ritorno per tornare al iterator
.
Tuttavia, non esiste una tale funzione per iterator
/const_iterator
, quindi è difficile vedere come questo possa essere raggiunto, a meno di fornire un typedef interno o richiedere una specializzazione esplicita.
Penso che una soluzione generale al problema (e che sarebbe anche portatile non è possibile). Almeno non riesco a immaginarmene uno :-).
Il problema difficile qui è che il contenitore definisce il tipo const_iterator. Per ottenere il tipo const_iterator per il contenitore è necessario determinare il tipo di contenitore.
Tuttavia, se si inizia con il tipo iteratore del contenitore come parametro metafunzione, non è possibile recuperare il tipo del contenitore.
Per noto T (s) ciò che si vuole può essere raggiunto comunque ...
non credo che questo è possibile poiché non v'è la mappatura spesso non ben definito tra i tipi di iteratori. Ad esempio, due contenitori possono condividere il tipo di iteratore non const, ma hanno diversi iteratori di const. In generale, è possibile eseguire la mappatura da tipi di contenitori a tipi di iteratore, ma non tra tipi di iteratore o da un tipo di iteratore a un tipo di contenitore.