¿Puedo crear clases anónimas en C ++ y capturar las variables externas como en Java?

En Java, cuando necesito una función de devolución de llamada, tengo que implementar una clase anónima. Dentro de la clase anónima, puedo acceder a las variables externas si estánfinal.

Ahora estoy haciendo lo mismo en C ++. Entiendo que C ++ lambda funciona mejor pero a veces necesito pasar muchas funciones donde con clases anónimas solo necesito pasar una instancia.

Probé el siguiente ejemplo. Funciona con GCC 4.3.4.

class IA {
public:
  virtual int f(int x) = 0;  
};

int main() {
    class : public IA {
        int f(int x) { return x + 1; }
    } a;
    doFancyWork(&a);
    return 0;
}

¿Es posible capturar las variables externas como esta?

int main() {
    int y = 100; // mark y as final if possible
    class : public IA {
        int f(int x) { return x + y; }
    } a;
    return 0;
}

ACTUALIZAR:

El segundo ejemplo no compilará. Los errores están aquí,

prog.cpp: In member function ‘virtual int main()::<anonymous class>::f(int)’:
prog.cpp:9: error: use of ‘auto’ variable from containing function
prog.cpp:7: error:   ‘int y’ declared here
prog.cpp: In function ‘int main()’:
prog.cpp:7: warning: unused variable ‘y’

ACTUALIZAR:

Acabo de darme cuenta de algunos problemas más al hacer esto:

No puedo escribir un constructor porque la clase no tiene un nombreLa lista de inicializadores no permite la herencia.Cualquier cambio para hacer que se compile hace que el código sea ilegible.

Creo que tengo que alejarme de las clases anónimas.

Respuestas a la pregunta(5)

Su respuesta a la pregunta