Maison >développement back-end >C++ >Comment puis-je résoudre l'ambiguïté lors de l'utilisation de pointeurs de fonction surchargés en C ?

Comment puis-je résoudre l'ambiguïté lors de l'utilisation de pointeurs de fonction surchargés en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-17 11:16:24391parcourir

How Can I Resolve Ambiguity When Using Overloaded Function Pointers in C  ?

Comprendre les pointeurs de fonction surchargés

En C, les fonctions surchargées peuvent introduire une ambiguïté lorsque vous travaillez avec des pointeurs de fonction. Cette ambiguïté se produit car le compilateur ne peut pas déterminer automatiquement quelle surcharge doit être invoquée lorsqu'il lui est présenté une déclaration de pointeur de fonction. Pour clarifier cette désignation et spécifier la surcharge prévue, plusieurs méthodes peuvent être utilisées.

Solution 1 : Utiliser static_cast<>()

Une approche consiste à utiliser le Opérateur de conversion static_cast<>(). Cet opérateur vous permet de lancer explicitement un pointeur de fonction vers la signature de surcharge souhaitée. Par exemple, dans le code ci-dessous, le pointeur de fonction est converti en surcharge qui accepte un argument de caractère :

std::for_each(s.begin(), s.end(), static_cast<void (*)(char)>(&f));

Solution 2 : Déclaration du pointeur de fonction

Alternativement , vous pouvez utiliser une déclaration de pointeur de fonction pour spécifier la surcharge prévue. Le compilateur déduira alors la surcharge appropriée en fonction de la déclaration. Par exemple :

void (*fpc)(char) = &f;
std::for_each(s.begin(), s.end(), fpc); // Uses the void f(char c); overload

Considération de fonction membre

Si la fonction surchargée est une fonction membre, vous devrez utiliser le modèle de fonction mem_fun du

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn