2013-05-08 8 views
1

Je codage des choses en C++, et comme toujours nous avons des « pensées » si quelque chose existe similaire sur la langue ...C++ NOUVEAU objet en tant que paramètre (comme Java)

Je suis maintenant, avec un doute sur les objets passant comme paramètres.

Ce que je fais toujours, est de créer un nouvel objet, et le transmettre est par exemple comme un pointeur, comme ceci:

mObject* obj1 = new mObject(); 
obj1->callback(the_callback_function); 

function_that_needs_obj(obj1); // (or the reference, if I didn't instantiated a pointer). 

C'est OK, fonctionne bien, il n'y a pas de problème avec cela. Mais, comme je l'ai utilisé Java, je faisais comme ceci:

function_that_needs_obj(new mObject(){ 
    public void onCallback(){ 
     // Custom code enters here.... 
    } 
}); 

Y at-il « sort » d'utilisation en C++ comme ça? Parce que pour chaque rappel que j'ai besoin de créer: Un Extended class, ou, un functionNamedVeryLongBecauseThereAreMany doit être écrit sur le dessus du code, et ce genre de "confondre" beaucoup le code ...

Et aussi, tous Variable d'objet , ne sont pas disponibles par voie this si j'assing une fonction de rappel ...

+2

Les rappels en C++ sont encore plus faciles. Prenez simplement n'importe quel type appelable et passez un lambda. – chris

+0

@chris, il n'y a pas de problème à "implémenter" les callbacks, il s'agit juste d'enchanter le code ... Si j'envoie un type callable au nouvel objet, le type callable ne pourra pas 'accéder' aux données de l'objet, seulement s'il utilise la portée globale. –

+0

Désolé ... Je ne suis pas anglais natif ... –

Répondre

4

si vous le soutien du compilateur C++ 11, vous pouvez utiliser l'expression lambda comme ceci:

function_that_needs_obj([]() 
         { 
          // Custom code enters here.... 
         }); 

What is a lambda expression in C++11?

+0

Savez-vous comment je le fais fonctionner pour le compilateur Arduino? –

+0

Désolé, je n'ai jamais entendu parler de ce compilateur –

+0

"Arduino" n'est pas en fait un compilateur, il utilise GCC, mais est-il possible de "l'activer"? –

0

Vous pouvez trouver ce dont vous avez besoin dans boost lambda!

Questions connexes