Я пытаюсь сохранить функцию обратного вызова в классе, поэтому я могу создавать разные экземпляры с различным обратным вызовом. К сожалению, stackoverflow заставляет меня писать больше бесполезных вещей, говоря, что мой пост - это в основном код. Однако я не вижу никаких проблем, которые мгновенно понимают мой вопрос, глядя на код ниже.Передача lambda как аргумент конструктора
Не могу понять, почему это не работает:
#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);
}
Не забывайте о равномерном инициализации: '' 'TypeName имяПеременной {};' '' и '' 'TypeName имяПеременной {arg1, arg2, ...};' '' –
Спасибо, я буду добавьте это. – jtbandes