Я хочу привязать событие класса-члена к функции потребительского класса при использовании композиции. Пожалуйста, исправьте меня, если описание проблемы неверно, я исхожу из фона C#.C++ 0x11 - std :: bind и состав
Вот код:
#include "stdafx.h"
#include <functional>
#include <iostream>
using namespace std::placeholders;
class Observable
{
public:
void Register(std::function<void()> Callback)
{
}
std::function<void()> OnStateChanged;
void ChangeState()
{
std::cout << "DevicioClient::ChangeState" << std::endl;
OnStateChanged();
}
};
class Observer
{
Observable client;
void OnStateChanged()
{
std::cout << "DevicioConsumer::OnStateChanged" << std::endl;
}
public:
void Run()
{
// does work
client.OnStateChanged = []{
std::cout << "client.OnStateChanged" << std::endl;
};
// doesn't work
// OnStateChanged = std::bind(&Observable::OnStateChanged, this);
client.ChangeState();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Observer consumer;
consumer.Run();
getchar();
return 0;
}
Я хочу запустить Observer :: OnStateChanged когда Наблюдаемый вызов OnStateChanged функции.
Почему _tmain вместо основного? Почему _TCHAR вместо char? –
Вы хотите 'std :: bind (& Observable :: OnStateChanged, & client)'. –
@ АндрейБеньковский: Не говоря уже о '#include" stdafx.h "' ... –