Такой код работает без проблем:
#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;
}