Say definisco, un'istanza, e utilizzare un funtore sommatore modo:In che modo il compilatore gestisce gli operatori di chiamata di funzione sovraccarichi nei funtori?
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
Il costruttore ed il sovraccarico ()
operatore sono entrambi chiamati con doppia parentesi e gli stessi tipi di parametri. In che modo il compilatore determina quale funzione utilizzare durante le istanze di SomeAdder
e le "chiamate di funzione", in modo da implementare il comportamento corretto? Sembra che la risposta sia ovvia in superficie, ma non riesco a capirlo.
Grazie per il vostro tempo!
Nello stesso modo in cui distingue 'f (x)' da 'g (x)' dove 'void f (int); void g (int) ';-) – delnan
Se il compilatore vede' SomeAdder (...) ', allora come potrebbe pensare che sia una chiamata a un' operator() 'se' SomeAdder' è un tipo? – mfontanini
A dire il vero mi ricordo di essere stato confuso anche da questo, inizialmente, molto tempo fa. –