Ich versuche, eine Rückruffunktion in einer Klasse zu speichern, damit ich verschiedene Instanzen mit unterschiedlichen Rückruf erstellen kann. Unglücklicherweise zwingt mich stackoverflow dazu, mehr nutzloses Zeug zu schreiben und sagt, dass mein Beitrag hauptsächlich Code ist. Jedoch sehe ich keine Probleme, meine Frage sofort zu verstehen, indem ich den Code unten anschaue.Übergabe von Lambda als Konstruktorargument
Kann nicht verstehen, warum dies nicht funktioniert:
#include <iostream>
#include <functional>
class A {
public:
A(std::function<void()> lambda) : lambda_{lambda} {};
void Run() { lambda_(); };
private:
std::function<void()> lambda_;
};
auto main() -> int {
auto q = []{};
A(q) a;
a.Run();
}
Fehler:
1.cpp:15:10: error: expected ‘;’ before ‘a’
A(q) a;
^
Während dies tut:
#include <iostream>
#include <functional>
void A(std::function<void()> lambda) {
lambda();
};
auto main() -> int {
auto q = []{};
A(q);
}
Sie über einheitliche Initialisierung nicht vergessen: '' 'Type-Name Variablenname {};' '' und '' 'Type-Name Variablenname {arg1, arg2, ...};' '' –
Danke, werde ich füge das hinzu. – jtbandes