LittleBuster
@LittleBuster

Как сделать Bind по аналогии с QtSignal?

Такой код работает без проблем:
#include <iostream>
#include <functional>

using namespace std;

class Button
{
public:
    function<void()> onClick;

    void start()
    {
        onClick();
    }
};

class Player
{
public:
    Player(Button *btn)
    {
        btn->onClick = bind(&Player::play, this);
    }

    void play()
    {
        cout << "play" << endl;
    }
};

int main(void)
{
    Button button;
    Player player(&button);
    button.start();
    return 0;
}


А как заставить работать этот?
#include <iostream>
#include <functional>

using namespace std;

class Button
{
public:
    function<void(int)> onClick;

    void start()
    {
        onClick(44);
    }
};

class Player
{
public:
    Player(Button *btn)
    {
        btn->onClick = bind(&Player::play, this);
    }

    void play(int num)
    {
        cout << "play: " << num << endl;
    }
};

int main(void)
{
    Button button;
    Player player(&button);
    button.start();
    return 0;
}
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C++
std::placeholders
btn->onClick = bind(&Player::play, this, std::placeholders::_1);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы