2010-06-01 8 views
1

J'utilise la fonction boost :: pour faire fonction des références:Comment passer référence en fonction des arguments

typedef boost::function<void (SomeClass &handle)> Ref; 
someFunc(Ref &pointer) {/*...*/} 

void Foo(SomeClass &handle) {/*...*/} 

Quelle est la meilleure façon de passer Foo dans le someFunc? J'ai essayé quelque chose comme:

someFunc(Ref(Foo)); 

Répondre

5

Afin de passer un objet temporaire à la fonction, il faut prendre l'argument soit par valeur ou par référence constante. Les références non constantes à des objets temporaires ne sont pas autorisées. Donc, soit des éléments suivants devraient fonctionner:

void someFunc(const Ref&); 
someFunc(Ref(Foo)); // OK, constant reference to temporary 

void someFunc(Ref); 
someFunc(Ref(Foo)); // OK, copy of temporary 

void someFunc(Ref&); 
someFunc(Ref(Foo)); // Invalid, non-constant reference to temporary 
Ref ref(Foo); 
someFunc(ref); // OK, non-constant reference to named object 

Par ailleurs, appeler le type Ref et l'instance pointer quand il est ni une référence ni un pointeur peut être un peu déroutant.

+1

Ok, c'est du travail. Merci pour cette aide pendant cette journée =) – Ockonal

Questions connexes