Posso criar classes anônimas em C ++ e capturar as variáveis ​​externas, como em Java?

Em Java, quando preciso de uma função de retorno de chamada, tenho que implementar uma classe anônima. Dentro da classe anônima, eu posso acessar as variáveis ​​externas se elasfinal.

Agora estou fazendo a mesma coisa em C ++. Eu entendo que lambda C ++ funciona melhor, mas às vezes eu preciso passar em muitas funções onde com classes anônimas, eu só preciso passar em uma instância.

Eu tentei o seguinte exemplo. Funciona com o 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;
}

É possível capturar as variáveis ​​externas assim?

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

ATUALIZAR:

O segundo exemplo não será compilado. Os erros estão aqui

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’

ATUALIZAR:

Acabei de perceber mais alguns problemas em fazer isso:

Eu não posso escrever um construtor porque a classe não tem um nomelista inicializadora não permite herança.qualquer alteração para torná-lo compilar torna o código ilegível.

Eu acho que tenho que me afastar das aulas anônimas.