Quando si tenta di utilizzare std::distance
con un iteratore personalizzato in gcc 4.7, si lamenta di non trovare il difference_type
. Purtroppo non ho idea del perché fallisca.difference_type non trovato
#include <iterator>
class nit {
public:
typedef int difference_type;
};
int main() {
const nit test1;
std::distance(test1, test1);
return 0;
}
dà l'errore:
/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h:114:5: error: no type named ‘difference_type’ in ‘struct std::iterator_traits<nit>’
Qui potrebbe essere la soluzione: http://www.cplusplus.com/forum/general/11428/. –
Provate ad ereditare la vostra classe da un'istanza di ['std :: iterator'] (http://en.cppreference.com/w/cpp/iterator/iterator). Posso immaginare che 'std :: iterator_traits' è specializzato solo per cose che ereditano da questo. –
Inoltre, posso andare oltre con 'class nit: public std :: iterator', ma 'T' deve essere un tipo non vuoto, e devi fornire un 'operator-' perché funzioni. In alternativa puoi avere un 'bidirectional_iterator_tag', ma poi devi fornire incrementori e comparatori. –