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.