Ich habe das folgende Verhalten mit std::function
und Typ Abzug entdeckt, was für mich unerwartet war:Vorlagentyp Abzug mit std :: function
#include <functional>
template <typename T>
void stdfunc_test(std::function<T(T)> func) {};
int test_func(int arg)
{
return arg + 2;
}
int main()
{
stdfunc_test([](int _) {return _ + 2;});
stdfunc_test(test_func);
}
Beiden Linien in main
Ergebnis in Fehlern:
no instance of function template "stdfunc_test" matches the argument list
Bei dem Versuch, in Visual Studio 2015 zu kompilieren.
Warum zieht der Typ Abzug Schablonentyp vom Funktionstyp nicht ab, und Gibt es einen Workaround dafür?
Weder das Lambda noch die Funktionszeiger ist eigentlich ein 'std :: function' - Sie sind implizit in eine 'std :: -Funktion umwandelbar. – aschepler
Werden implizite Konvertierungen bei der Ableitung von Template-Variablen nicht berücksichtigt? – redspah
Nehmen Sie einfach an, es ist eine Funktion: 'Vorlage void stdfunc_test (T func)'. Beschränken Sie dann den Umfang der Vorlage mit SFINAE. –
rustyx