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);
相关文章:
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 为什么 std::绑定错误参数可以成功?
- 如何将类 1 的 std::函数绑定到类 2 的函数?
- 无法将类型"T&"的非常量左值引用绑定到类型"T"的右值 t++ std::atomic<T>
- 如何将 STL 队列推送函数绑定到 std::函数?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- msvc 编译器(和其他编译器)如何知道要绑定到哪个 std 重载?
- 如何将 std::将结果绑定到 std::function
- std::绑定variadic模板和自动返回类型
- 带有 std::minmax 和 rvalues 的结构化绑定
- std::绑定可变参数模板成员函数和通用引用
- 结构化绑定是否适用于 std::vector?
- 为什么 std::bind 绑定到成员函数时无法编译?
- 无法绑定可变参数函数并保存到 std::函数
- 错误:无法将"std::istream {aka std::basic_istream<char>}"lvalue 绑定到"std::basic_istream&<char>&
- 无法将 std::绑定返回值分配给 std::function
- 如何修改 std::generate 的绑定成员函数的结果
- std::tie 在从函数调用传递值时失败,并显示"无法绑定非常量左值引用"
- std ::绑定函数以std :: unique_ptr作为参数
- C++0x11-std::绑定和合成