Sto cercando di utilizzare una classe locale come un functor e ottenere l'errore del compilatore utilizzando g ++ (3.4.6).Classe locale C++ come functor
Inserendo la classe sottostante (Processor
) nell'ambito globale risolve l'errore, quindi suppongo che l'errore sia dovuto a strutture/classi locali della funzione. Preferirei avere le classi all'interno della funzione per chiarezza del codice e facilità d'uso. Vuoi sapere se esiste una soluzione alternativa per far funzionare il codice qui sotto.
test.cpp: 24: Errore: nessuna funzione di corrispondenza per chiamata a \ u2018foreachArg (int &, char * &, processSubs (int, char * ) :: Processore &) \ u2019
template <class Functor>
void foreachArg(int n, char *args[], Functor& f)
{
for(int i=0; i<n; ++i)
f(args[i]);
}
int processSubs(int argc, char *args[])
{
class Processor
{
public:
void operator()(const char *arg)
{
}
};
Processor p;
foreachArg(argc, args, p);
}
int main(int argc, char *argv[])
{
processSubs(argc, argv);
}
No, le due opzioni utilizzano un compilatore compatibile con C++ 11 o spostano la classe all'esterno della funzione. –
Consultare: http://stackoverflow.com/a/2598272/294864 per un riferimento alla specifica before-C++ 11 riguardante le strutture anonime come argomenti del modello. – Akanksh
C'è una terza opzione: utilizzare un idioma del sintetizzatore "locale". Boost ne sta aggiungendo uno, per esempio. –