2011-02-24 3 views

risposta

4

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.

0

mi viene in mente qualcosa per un reverse_iterator: utilizzando la funzione di membro della basedecltype, 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.

0

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 ...

0

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.