Saya ingin konstruktor menerima iterator apa pun yang memiliki sifat x
dan kelas referensi y
.
Class(std::iterator<std::random_access_iterator_tag, MyClass*> it);
Tetapi ketika saya mencoba melewati iterator tersebut, kompilasi gagal dengan Candidate constructor not viable: no known conversion from 'iterator' (aka '__deque_iterator<value_type, pointer, reference, __map_pointer, difference_type, __block_size>') to 'std::iterator<std::random_access_iterator_tag, MyClass *>'
.
Kode penyisipan:
std::deque<MyClass*> collection_with_random_access_iterator{};
Class tmp(collection_with_random_access_iterator.begin());
Apa yang bisa saya lakukan di sini?
deque<T>::iterator
tidak mewarisi dariiterator<random_access_iterator_tag, T>
(Standar tidak mengharuskannya melakukan hal itu). (Ngomong-ngomong,MyClass**
juga merupakan sejenis iterator akses acak keMyClass*
(dan misalnyavector<MyClass*>::iterator
bisa saja seperti itu), tetapi petunjuk mentah tidak dapat diturunkan dari apa pun.) - person gx_   schedule 07.09.2013std::iterator
dari kenyamanan, meskipun secara publik, hanyalah detail implementasi. - person gx_   schedule 07.09.2013iterators
koleksi standar diturunkan dari induk yang sama. - person Appleshell   schedule 07.09.2013vector<T>::iterator
danbasic_string<T>::iterator
dapat berupaT *
. Bagaimanapun, warisan tidak akan relevan; Anda tidak ingin menggunakan fungsi virtual untuk melakukan dereferensi iterator. - person Potatoswatter   schedule 08.09.2013