Kann ich in C ++ anonyme Klassen erstellen und die externen Variablen wie in Java erfassen?
Wenn ich in Java eine Rückruffunktion benötige, muss ich eine anonyme Klasse implementieren. Innerhalb der anonymen Klasse kann ich auf die externen Variablen zugreifen, wenn diese vorhanden sindfinal
.
Jetzt mache ich dasselbe in C ++. Ich verstehe, dass C ++ Lambda besser funktioniert, aber manchmal muss ich viele Funktionen übergeben, wobei ich bei anonymen Klassen nur eine Instanz übergeben muss.
Ich habe folgendes Beispiel ausprobiert. Es funktioniert mit 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;
}
Ist es möglich, die äußeren Variablen so zu erfassen?
int main() {
int y = 100; // mark y as final if possible
class : public IA {
int f(int x) { return x + y; }
} a;
return 0;
}
AKTUALISIEREN:
Das zweite Beispiel wird nicht kompiliert. Die Fehler sind hier,
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’
AKTUALISIEREN:
Ich habe nur noch ein paar Probleme dabei bemerkt:
Ich kann keinen Konstruktor schreiben, da die Klasse keinen Namen hatInitialisierungsliste erlaubt keine Vererbung.Jede Änderung zum Kompilieren macht den Code unlesbar.Ich denke, ich muss mich von anonymen Klassen entfernen.