pourquoi voudrais-tu faire ça? Non, cela ne peut pas être fait car vous devez avoir un objet comme l'un de ses paramètres. L'implémentation de la fonction membre C++ et la fonction C sont des choses différentes.
C++ Code
class foo
{
int data;
void DoSomething()
{
data++;
}
};
int main()
{
foo a; //an object
a.data = 0; //set the data member to 0
a.DoSomething(); //the object is doing something with itself and is using 'data'
}
Voici une façon simple comment faire C.
typedef void (*pDoSomething)();
typedef struct __foo
{
int data;
pDoSomething ds; //<--pointer to DoSomething function
}foo;
void DoSomething(foo* this)
{
this->data++; //<-- C++ compiler won't compile this as C++ compiler uses 'this' as one of its keywords.
}
int main()
{
foo a;
a.ds = DoSomething; // you have to set the function.
a.data = 0;
a.ds(&a); //this is the same as C++ a.DoSomething code above.
}
Enfin, la réponse à votre question est le code ci-dessous.
void DoSomething(foo* this);
int main()
{
DoSomething(??); //WHAT!?? We need to pass something here.
}
Vous voyez, vous avez besoin d'un objet pour passer. La réponse est non.
Tout est possible. La météo est valide ou même une bonne idée dépend de ce que vous faites. Plus de détails sur la relation A/B et ce que fait la méthode serait bien. (c'est-à-dire du code). –
@ Martin, j'ai gardé la question générique volontairement. Dans mon cas particulier, les détails sont fastidieux et sans importance. En fait, après avoir lu les réponses, j'ai décidé de l'éviter, et de découpler le processus d'initialisation de la logique "go", qui lance la logique métier. Rétrospectivement, c'est une bonne pratique que je vais adopter. – Jonathan
Bonne idée: Parce que les questions génériques vous donnent de bonnes réponses explicites? –