C++0x11-std::绑定和合成

C++ 0x11 - std::bind and composition

本文关键字:绑定 C++0x11-std      更新时间:2023-10-16

我想在使用组合时将成员类事件绑定到使用者类函数。如果问题描述错误,请纠正我,我来自C#背景。

这是代码:

#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;
}

当Observable调用OnStateChanged函数时,我想运行Observer::OnStateChanged。

它为您尝试绑定的函数显示&Observable::OnStateChanged。。。你是说&Observer::OnStateChanged吗?因为这还可以:

client.OnStateChanged = std::bind(&Observer::OnStateChanged, this);