Adresse de l'élément pointé quel que soit le type / pointeur de l'itérateur passé
Ce qui serait le plus générique de la syntaxe de la fonction suivante :
template<IteratorType> void myFunction(const IteratorType& myIterator)
{
_ptr = &myIterator[0];
}
- Il un itérateur myIterator (il peut être un pointeur brut) et le but est d'attribuer l'adresse de l'objet pointé par myIterator
à un pointeur brut _ptr
. Actuellement, je utiliser &myIterator[0]
mais j'ai réalisé que seul l'accès aléatoire itérateurs ont l'opérateur [].
Donc, il y a une syntaxe qui fonctionne avec tous les types de la norme itérateurs et les pointeurs ?
source d'informationauteur Vincent
Vous devez vous connecter pour publier un commentaire.
Vous pouvez déréférencement de pointeur et ensuite prendre l'adresse de l'objet.
Selon la norme * opérateur de renvoyer une référence donc, à mon avis, la meilleure façon est
&*myIterator
mais depuis la classe peut surchargé le & exploitant le meilleur moyen eststd::addressof(*myIterator)
qui fonctionnent pour toutes les classesTous les itérateurs sont tenus d'avoir
operator *
(24.2.2:2), de sorte que vous pouvez écrireCependant, ce n'est pas valable pour la sortie des itérateurs, où
*r
est valable uniquement sur le côté gauche d'une opération d'affectation (24.2.4:2).Également noter qu'il n'est pas nécessairement vrai que
*r
fournira une valeur qui&
peut raisonnablement être appliquée; la spécialisationstd::vector<bool>
(23.3.7) a unreference
type qui n'est pasbool &
par exemple. Dans votre cas, la cession_ptr = &*myIterator
serait attraper ce, en supposant que_ptr
est un type de pointeur, et vous obtenez une compilation échec.