2013-09-24 4 views
0

Voici la question: Je suis en train de faire,Wrapper Fonction pour une récursive fonction qui prend une « passe par référence » valeur

Node* foo(Node *& ptr, other args) { 
    // some work here 
} 

Dans la fonction enveloppe, je dois déclarer une valeur temporaire (qui n'a pas de sens):

Node* wrapper(...) { 
    Node* p = nullptr; 
    return foo(p, other args); 
} 

est-il possible de se débarrasser de la première ligne dans la fonction enveloppe? Merci!!

+0

Pouvez-vous changer la signature de 'foo'? Il semble que 'Node * & ptr' n'est pas du tout nécessaire. (En outre, la question pourrait avoir de meilleures réponses si vous fournissez plus d'informations, comme ce que 'wrapper' est en train de faire) –

+0

Pourquoi avez-vous besoin de déclarer une valeur temporaire? En outre, vous ne pouvez pas simplement passer p en tant qu'argument à la fonction wrapper. – krammer

Répondre

1

Je suppose que dans foo vous affectez ptr une certaine valeur (sinon le *& n'a aucune valeur). Vous ne pouvez pas passer nullptr et vous devez déclarer un pointeur comme indiqué dans le wrapper car nullptr est une valeur. Un rvalue est une expression, ou un "objet sans nom" et vous ne pouvez pas prendre l'adresse de celui-ci. Il y a plus d'informations ici Why don't rvalues have an address?.

Questions connexes