Bonjour à tous,
en C++, il est possible de transmettre une fonction par référence à une méthode (au sens de l'objet) ou a une autre fonction.
Mais est-il possible de transmettre une méthode (au sens de l'objet) par référence?
merci
Bonjour à tous,
en C++, il est possible de transmettre une fonction par référence à une méthode (au sens de l'objet) ou a une autre fonction.
Mais est-il possible de transmettre une méthode (au sens de l'objet) par référence?
merci
kamoulox
tu veux faire quoi ou tu crois que quoi n'est pas possible ?
méthode = fonction donc tes 2 phrases sont identiques, et "au sens de l'objet" c'est sensé vouloir dire quoi ?
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Bonjour,
Je voudrais savoir si donner une méthode en argument d'une fonction est possible, comme il est possible de le faire pour une fonction.
"Au sens de l'objet" avait pour but de préciser qu'il s'agit bien d'une méthode implémentée au sein d'une classe. Cette précaution oratoire était peut-être inutile, mais mon objectif était de me faire comprendre au mieux.
Méthode != fonction. Une méthode est propre à une classe, ce que n'est pas une fonction. De plus, concernant le problème qui nous intéresse, j'ai vu plusieurs sources indiquant que pthread_create, par exemple, n'acceptait en argument que des méthodes statiques.
Ce que t'appelles méthode c'est une fonction membre, et choisir l'un ou l'autre des noms est une nomenclature que chacun suit ou non et absolument pas un standard.
La seule différence c'est leur signature.
Et passer une fonction en paramètre c'est créer un foncteur.
pthread_create c'est une lib en C où les fonctions membre n'existent pas. Ça prend ce que le C permet, des fonctions libres (ou static).
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
J'appelle méthode une méthode au sens de l'objet, et c'était très clair dans mon message.
Et il n'y a pas qu'une différence de signature entre une fonction et une méthode au sens de l'objet.
Il y a beaucoup plus simple pour passer une fonction en paramètre: lui transmettre un pointeur sur cette fonction, c'est ce qui est fait dans le code que j'ai récupéré, et je réfléchis à la réécrire en objet.
S'il n'y avait pas de différence entre méthode et fonction en C++, pthread_create accepterait des méthodes en argument.
En C++, on retrouve plutôt le terme de "fonction membre" (ou "member function", en anglais) que le terme de "méthode". Voir https://en.cppreference.com/w/cpp/la...mber_functions
Je suppose que ton problème est : comment passer un couple [objet ; fonction membre] là où tu passes habituellement un simple pointeur sur fonction, non ?
Si tu sais déjà tout pourquoi venir poser des questions alors ?
C'est un nouveau concept de venir avec des questions, dire qu'en fait non on a raison et on sait mieux les réponses et surtout ne jamais présenter de code incriminé ?
On utilisait pthread y'a 20 ans déjà, tout comme le C++, et les deux ensembles. Des ressources qui montrent comment faire sont légion sur internet pour qui veut bien chercher.
Sur ce seul forum il y a des dizaines de résultats à ce sujet. Avec le simple "pthread_create", donc pas vraiment un terme caché ou obscur, pour faire ressortir des résultats probants.
https://www.developpez.net/forums/d1.../#post10432689
https://www.developpez.net/forums/d1...thread_create/
https://www.developpez.net/forums/d1...e/#post8106791
https://cpp.developpez.com/faq/cpp/?...ur-de-fonction
https://www.developpez.net/forums/d1...s/#post7553057
https://www.developpez.net/forums/d1...e/#post7552025
https://www.developpez.net/forums/d1...ction-d-objet/
Et maintenant on préfèrera le plus souvent std::thread qui est dans le standard depuis C++11.
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Il existe std::thread pour ne pas avoir à ce préoccuper de toute la gestion des pointeurs de fonction. Sinon, un simple intermédiaire comme ce qui suit suffit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 auto func = [](void* ctx) { static_cast<LeTypeVoulut*>(ctx).la_fonction(); return .... }; pthread_create(thread, attr, func, &obj);
Pourquoi on parle de cast d'un seul coup ?
const_cast est possible en C :
Seul dynamic_cast est spécifique au C++.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main() { const int a = 2; int * p = (int*) &a; *p = 45; return a; }
Partager