En C, il est possible d'avoir des fonctions avec le même nom mais des paramètres différents, appelées fonction surcharge. Cela peut introduire une ambiguïté lors du passage d'une fonction surchargée comme argument à une fonction telle que std::for_each().
Problème :
Considérez l'extrait de code suivant :
class A { void f(char c); void f(int i); void scan(const std::string& s) { std::for_each(s.begin(), s.end(), f); } };
Dans cet exemple, la méthode scan() tente de transmettre la fonction surchargée f() à std::for_each(). Cependant, le compilateur ne peut pas déterminer automatiquement quelle surcharge de f() utiliser.
Solution :
Pour spécifier la surcharge souhaitée, vous pouvez utiliser static_cast<>( ) ou le pointeur de fonction mem_fun().
Méthode 1 : Static_Cast<>()
// Uses the void f(char c); overload std::for_each(s.begin(), s.end(), static_cast<void (*)(char)>(&f)); // Uses the void f(int i); overload std::for_each(s.begin(), s.end(), static_cast<void (*)(int)>(&f));
En convertissant le pointeur de fonction vers un type spécifique, vous forcez le compilateur à résoudre la surcharge en fonction de la signature de fonction donnée.
Méthode 2 : Mem_Fun()
Si f() est une fonction membre, vous pouvez utiliser le Pointeur de fonction mem_fun() :
std::for_each(s.begin(), s.end(), std::mem_fun(&A::f));
Cette approche vous oblige à spécifier le nom de la classe et la surcharge, qui peuvent être plus verbeuses mais aussi plus flexibles.
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!