Recentemente ho riscontrato la necessità di applicare un puntatore a membro all'oggetto designato da un iteratore. Ho provato la sintassi naturale:Classi simili a puntatori e l'operatore -> *
ite->*ptr = 42;
Con mio disappunto, non ha compilato. Gli iteratori non sovraccaricano operator->*
, ma più sorprendentemente non fanno puntatori intelligenti. Avevo bisogno di ricorrere al seguente clunkiness:
(*ite).*ptr = 42;
sperimentazione (si veda l'esempio vivo di seguito) ha dimostrato che una tale sintassi sembra essere realizzabile per classi personalizzate, sia per i puntatori-a-membri e puntatori-to funzioni membro, almeno dal C++ 14.
Così:
- C'è un motivo per le classi di puntatore come standard non sovraccaricare
operator->*
, o è solo una svista? - In caso di sovraccarico di
operator->*
quando si definiscono le mie classi puntatore-simili o si applica lo stesso motivo?
Live example - cosa compila, cosa no e un proof-of-concept per una classe personalizzata.
@Galik faccio membri puntatori-a-dire, non membri di pianura. Dai un'occhiata [qui] (http://en.cppreference.com/w/cpp/language/pointer#Pointers_to_data_members). – Quentin
Ottima domanda. +1. – Nawaz
vedere http://stackoverflow.com/questions/14106975/error-in-using-unique-ptr-with-member-function-pointer vengono fatti alcuni buoni punti – Hcorg