Это расширение к этому вопросу.
У меня есть карта, которая хранит векторы обратных вызовов и связывает их с типом события. Обратный вызов выглядит так:
typedef std::function< void(sf::Event const&) > Callback;
InputHandler::registerEvent()
просто берет тип события и Обратный вызов и сохраняет его внутри карты. Когда я хочу использовать его в классе Button
:
cpp:
//inside the Button Constructor
inputhandler.registerEvent(sf::Event::MouseButtonPressed, Callback([this](sf::Event const& event)
{
//memberFunc();
}));
Это не дало мне ошибки, но вел себя неправильно. Он действительно выполнял лямбду, но не изменял класс, в котором он был определен. Поэтому я добавил строку в конструктор, которая просто печатает адрес только что созданного объекта. Я создаю только одну кнопку, поэтому должен быть напечатан только один адрес. Но есть два разных адреса для печати. Это означает, что при вставке лямбда-выражения, обернутого в std :: function, в вектор создается новый объект Button. Как это может быть? Неявное создание объекта?