gpt4 book ai didi

c++ - std::bind(&T::memberFunc, this) 如何始终绑定(bind)到 std::function 而不管 T 是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 01:29:44 24 4
gpt4 key购买 nike

据我所知,成员函数指针只能赋值给指向成员函数类型的指针,除此之外转换成任何其他类型都会违反标准,对吗?

并且在调用 std::bind(&T::memberFunc, this) 时,它应该返回一个依赖于 T 的依赖类型。(在 std在 VC++ 版本中,它是一个名为 _Binder 的类模板。

那么问题就变成了为什么一个 std::funcion 可以涵盖所有 _Binder(VC++ 版本) 类型。

class A
{
public:
void func(){}
};
class B
{
public:
void func(){}
};

std::function<void(void)> f[2];

A a;
B b;
f[0] = std::bind(&A::func, &a);
f[1] = std::bind(&B::func, &b);

而且我无法想象存储函数的 std::funcion 成员的类型,除非我从一开始就错了。

This question只覆盖了需要用它的实例调用的成员函数。

但我的是关于为什么一个 std::function 类型可以容纳所有 T 类型。

最佳答案

简而言之,发生的事情是std::bind(&A::func, &a)返回类类似于

的对象
class InternalClass
{
A* a_; // Will be initialized to &a
public:
void operator()(void)
{
a_->func();
}
};

[请注意,这是高度简化的]

可调用 operator()功能是匹配 void(void) 的内容std::function<void(void)> 的签名.

关于c++ - std::bind(&T::memberFunc, this) 如何始终绑定(bind)到 std::function<void(void)> 而不管 T 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49377898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com