Ambiguïté résidant dans l'argument de modèle de Std :: Function malgré la définition du type
Dans ce scénario, plusieurs surcharges existent pour la fonction « a », chacune acceptant une signature distincte de std::function:
Le l'ambiguïté surgit du fait que les deux fonctions
template<class _Fx> function(_Fx _Func, typename _Not_integral<!...int>::_Type = 0);
Essentiellement, n'importe quel objet peut être converti en std::function, facilitant l'effacement de type et permettant la gestion de objets arbitraires en tant que fonctions.
Pour illustrer davantage le problème, considérons l'exemple simplifié suivant :
template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };
Pendant la résolution de surcharge pour « a », si une surcharge viable ne peut pas être identifiée, le compilateur tente de convertir les arguments en utilisant soit le constructeur du paramètre, soit l'opérateur de conversion de l'argument. Dans ce cas, la conversion s'effectue via le constructeur de myfunc.
Puisque le constructeur de myfunc accepte tout, les deux fonctions
En fin de compte, cela a pour conséquence que le compilateur est incapable de déterminer quelle surcharge de 'a' invoquer, ce qui conduit à l'ambiguïté.
Pour pour résoudre ce problème, vous avez plusieurs options :
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!