Hier ist meine Frage: ich einen Funktor definieren:Übergeben Sie anonymes Funktionsobjekt an std :: function?
class A {
public:
int operator()(int a, int b) const{
return a + b;
}
};
typedef function<int (int, int)> Fun;
dann verwende ich eine anonyme Funktors ein std :: function-Objekt zu erstellen, und das finde ich etwas seltsam. Hier ist mein Code:
Fun f(A());
f(3, 4);
Leider ist es falsch. Die Fehlermeldung lautet:
error: invalid conversion from ‘int’ to ‘A (*)()’ [-fpermissive]
error: too many arguments to function ‘Fun f(A (*)())’
Allerdings, wenn ich meinen Code wie folgt zu ändern:
A a;
Fun f(a);
f(3, 4);
oder
Fun f = A();
f(3, 4);
Das Ergebnis stimmt. Also, warum ist es? Bitte hilf mir, es zu verstehen. Vielen Dank.
Sie haben mich dazu geschlagen. Das meiste Ärger-Problem in der Tat. –
Manchmal werden Begriffe in der Informatik in irreführender Weise benannt. Dies ist nicht einer dieser Zeiten. – Yakk