コールバック関数をクラスに格納しようとしているため、異なるコールバックを使用して異なるインスタンスを作成できます。残念なことに、stackoverflowは私のポストが主にコードだと言って、無駄なものを書くよう強制します。しかし、私はすぐに私の質問を下記のコードを見て理解するのにトラブルが表示されません。コンストラクタ引数としてラムダを渡します。
これが動作しない理由を理解することはできません:
#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();
}
エラー:
1.cpp:15:10: error: expected ‘;’ before ‘a’
A(q) a;
^
をこれがしますが:
#include <iostream>
#include <functional>
void A(std::function<void()> lambda) {
lambda();
};
auto main() -> int {
auto q = []{};
A(q);
}
均一な初期化を忘れないでください: '' '型名variableNameに{};' ''と '' '型名variableNameに{arg1に、ARG2、...};' '' –
おかげで、I'LLそれを加えなさい。 – jtbandes