Estoy tratando de usar una clase local como un funtor y obtener el error del compilador usando g ++ (3.4.6).C++ clase local como functor
Al colocar la siguiente clase (Processor
) en el alcance global se resuelve el error, por lo que supongo que el error se debe a la función de las estructuras/clases locales. Preferiría tener las clases dentro de la función para la claridad del código y la facilidad de uso. Desea saber si hay una solución alternativa para que el siguiente código funcione.
test.cpp: 24: error: no existe función de emparejamiento para la llamada a \ u2018foreachArg (int &, char * &, processSubs (int, char * ) :: Procesador &) \ 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, las dos opciones utilizan un compilador compatible con C++ 11 o mueven la clase fuera de la función. –
Consulte: http://stackoverflow.com/a/2598272/294864 para obtener una referencia a la especificación anterior a C++ 11 con respecto a estructuras anónimas como argumentos de plantilla. – Akanksh
Hay una tercera opción: utilizar un modificador de idioma "local". Boost está agregando uno, por ejemplo. –