operatore di chiamata di funzione [duplicato]
-
11-10-2019 - |
Domanda
possibili duplicati:
C ++ Funtori -. ed i loro usi
Perché operatore di override ()?
Ho visto l'uso di operator()
sui contenitori STL, ma di cosa si tratta e quando si usa?
Soluzione
Tale operatore trasforma il vostro oggetto in funtore. Ecco bell'esempio di come è fatto.
Il prossimo esempio illustrato come implementare una classe per usarlo come un funtore:
#include <iostream>
struct Multiply
{
double operator()( const double v1, const double v2 ) const
{
return v1 * v2;
}
};
int main ()
{
const double v1 = 3.3;
const double v2 = 2.0;
Multiply m;
std::cout << v1 << " * " << v2 << " = "
<< m( v1, v2 )
<< std::endl;
}
Altri suggerimenti
Si rende l'oggetto "callable" come una funzione. A differenza di una funzione, però, un oggetto può mantenere lo stato. Effettivamente una funzione può fare questo in un senso debole, utilizzando un locale statica, ma poi statica locale è permanentemente lì per qualsiasi chiamata a tale funzione fatta in qualsiasi contesto da qualsiasi thread.
Con un oggetto che agisce come una funzione, lo Stato è un membro di un solo quell'oggetto e si può avere altri oggetti della stessa classe che hanno il proprio set di variabili membro.
L'insieme di boost :: bind (che si è basata sulle vecchie leganti STL) si basa su questo concetto.
La funzione ha una firma fisso ma spesso è necessario più parametri rispetto in realtà sono passati nella firma per eseguire l'azione.