Say I definieren, instanziiert und einen Addierer Funktors wie so verwenden:Wie behandelt der Compiler überladene Funktionsaufrufoperatoren in Funktoren?
class SomeAdder {
public:
SomeAdder(int init_x): x(init_x) {}
void operator()(int num) { cout << x + num <<endl; }
private:
int x;
};
SomeAdder a = SomeAdder (3);
a(5); //Prints 8
SomeAdder b(5);
b(5); //Prints 10
Der Konstruktor und die überladene ()
Bediener beide Doppel Klammern genannt verwendet und haben die gleichen Arten von Parametern. Wie würde der Compiler bestimmen, welche Funktion bei den Instanziierungen von SomeAdder
und den "Funktionsaufrufen" verwendet werden soll, um das korrekte Verhalten zu implementieren? Die Antwort scheint oberflächlich klar zu sein, aber ich kann diesen Gedanken nicht umschließen.
Danke für Ihre Zeit!
Auf die gleiche Weise unterscheidet es 'f (x)' von 'g (x)' wobei 'void f (int); void g (int) ';-) – delnan
Wenn der Compiler' SomeAdder (...) 'sieht, wie könnte er dann denken, dass es sich um einen' operator() 'handelt, wenn' SomeAdder' ein Typ ist? – mfontanini
Um ehrlich zu sein, erinnere ich mich daran, dass ich auch anfangs verwirrt war. –