J'ai une API d'arbres traversal qui ressemble à ceciarguments variables pour les fonctions de rappel
treeTraverse(Tree *ptr, (void *) call_back(Tree *ptr));
Cette API traverse l'arbre et appelle la fonction de rappel à chaque entrée. Je veux traverser l'arbre et appeler une fonction
myFunc(Tree *ptr, int a, int b)
pour chaque entrée sur l'arbre, mais comme vous pouvez le voir ci-dessus la fonction de rappel accepte un seul argument, si l'enregistrement myFunc() que la fonction de rappel wont travail. Comment puis-je contourner ce problème. Réécrire l'API treeTraverse() pour accepter les arguments variables n'est pas réalisable, car il s'agit d'une API de structure et si je dois la changer, je devrai la faire réviser par beaucoup de gens. Ce n'est pas quelque chose que j'attends avec impatience car j'ai seulement besoin de mettre en œuvre une très petite fonctionnalité.
Une autre manière serait de rendre les variables 'a' & 'b' globales, donc myFunc peut y accéder. mais cette solution a l'air très moche.
Existe-t-il un autre moyen de contourner ce problème?
pouvez-vous ajouter une fonction treeTraverseWithParms à l'API? – Kwariz
Les variables globales avec liaison interne doivent être OK (bien qu'elles aient une durée de vie statique, ce qui peut poser un problème lorsque plusieurs entiers sont nécessaires pour une tâche mineure). Votre "API" ressemble plus à une déclaration d'appel de fonction qu'à un déclarateur de fonction. –
Cette erreur ne peut pas être compilée: spécification de déclaration attendue ou '...' avant '(' token ' – fork0