Dire que j'ai cette fonction:Conversion d'un Functor à un objet de type fonction
template <typename T>
void foo(function<T(const T&, const T&)> op, const T& lhs, const T& rhs) {
cout << op(lhs, rhs) << endl;
}
C'est legal code:
function<int(const int&, const int&)> op = plus<int>();
foo(op, 13, 42);
Mais quand je fais ceci:
foo(plus<int>(), 13, 42)
I obtenir l'erreur:
No matching function for call to
foo(std::plus<int>, int, int)
Pourquoi est-ce que je peux initialiser un objet de type function<int(const int&, const int&)>
de plus<int>()
mais je ne peux pas passer plus<int>()
dans un paramètre de type function<T(const T&, const T&)>
? Est-ce quelque chose à voir avec le modèle?
Les conversions de type implicite ne fonctionnent pas pendant la déduction d'argument de modèle. – Arunmu
@Arunmu Je pense qu'il existe des exceptions à cette règle: [exemple] (http://melpon.org/wandbox/permlink/ld8NyDotgjK7B7WT) –
@Arunmu C'est la réponse car cela fonctionne si je supprime le modèle: http: // ideone.com/bfjy3p Alors, comment puis-je connaître la conversion entre 'plus()' et 'la fonction ' est implicite? –