Maison > Article > développement back-end > Pourquoi « std :: function » entraîne-t-il une ambiguïté dans les signatures d'arguments de modèles ?
Ambiguïté dans les signatures d'arguments du modèle std::function
L'ambiguïté survient lorsque les deux fonctions
Pour illustrer cela, considérons la classe :
<code class="cpp">template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };</code>
Lorsque le compilateur tente de trouver des fonctions viables pour un ensemble de surcharge, il recherche des conversions potentielles. Dans ce cas, les deux constructeurs de myfunc acceptent n'importe quoi, permettant la conversion de int(*)() en myfunc
Ainsi, lors de l'appel de a(x) ou a(y), le compilateur rencontre deux fonctions viables, ce qui entraîne une ambiguïté.
Résolution
La signature de l'argument modèle de std::function fait partie de son type lors de la déclaration et de la définition des fonctions. Cependant, lors de la construction de l'objet, la signature est ignorée.
Pour contourner l'ambiguïté, on peut :
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!