ฉันต้องการให้ Constructor ยอมรับตัววนซ้ำใด ๆ ที่มีลักษณะ x
และอ้างอิงคลาส y
Class(std::iterator<std::random_access_iterator_tag, MyClass*> it);
แต่เมื่อฉันพยายามส่งตัววนซ้ำ การคอมไพล์ล้มเหลวด้วย 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 *>'
รหัสการแทรก:
std::deque<MyClass*> collection_with_random_access_iterator{};
Class tmp(collection_with_random_access_iterator.begin());
ฉันจะทำอะไรที่นี่?
deque<T>::iterator
ไม่ได้รับการสืบทอดจากiterator<random_access_iterator_tag, T>
(มาตรฐานไม่จำเป็นต้องทำเช่นนั้น) (อย่างไรก็ตาม aMyClass**
เป็นตัววนซ้ำแบบเข้าถึงแบบสุ่มถึงMyClass*
เช่นกัน (และเช่นvector<MyClass*>::iterator
ก็เป็นแบบนั้นได้) แต่ตัวชี้แบบดิบไม่สามารถหาได้จากสิ่งใดเลย) - person gx_   schedule 07.09.2013std::iterator
แม้ว่าจะเปิดเผยต่อสาธารณะก็เป็นเพียงรายละเอียดการใช้งานเท่านั้น - person gx_   schedule 07.09.2013iterators
ของคอลเลกชันมาตรฐานที่จะได้มาจากพาเรนต์ทั่วไป - person Appleshell   schedule 07.09.2013vector<T>::iterator
และbasic_string<T>::iterator
สามารถเป็นT *
อย่างไรก็ตาม มรดกจะไม่เกี่ยวข้อง คุณไม่ต้องการใช้ฟังก์ชันเสมือนเพื่อยกเลิกการอ้างอิงตัววนซ้ำ - person Potatoswatter   schedule 08.09.2013