Lassen Sie uns ein einfaches FunktorsTerminologie rund um functors
class LessThan {
public:
explicit LessThan (int in) : val(in) {}
bool operator() (int param) const {
return param < val;
}
private:
int val;
};
, die ich so zum Beispiel verwenden können -
vector<int> myVector = factory();
size_t count = count_if(begin(myVector), end(myVector), LessThan(10));
Mein Verständnis der Terminologie rund um functors ist, dass die Klasse LessThan
ein Funktor ist. d.h. es ist ein Typ, kein Objekt. es ist abstrakt, nicht konkret.
Also, was nennen wir LessThan(10)
? Hier erstellen wir ein Objekt, indem wir den Funktortyp LessThan
instanziieren. Also, nennen wir es ein Funktor-Objekt? Funktoren sind jedoch Funktionsobjekte. Also, LessThan(10)
ist ein Funktionsobjekt Objekt ??
Ist das nicht absurd?
Objekte * sind * Typen. Oder sie sind * Instanzen * von Typen. Benutzerdefinierte Klassen sind Typen, und wenn Sie sie instanziieren, erhalten Sie Objekte dieses Typs. –
@JesperJuhl Für 'int a' ist ...' int' ein Typ und 'a' ist ein Objekt. Und die beiden sind also verschieden. –
Wenn es hilft, denken Sie einfach so: 'LessThan' ist ein _Funktionsobjekttyp_. 'LessThan (10)' ist ein _Funktionsobjekt_. –