这可能是一件愚蠢而愚蠢的事情 - 但我想了解这里发生了什么。
我有以下代码:
#include <iostream>
#include <functional>
namespace
{
struct call
{
void operator()() const
{
std::cout << "call::operator()" << std::endl;
}
};
struct dummy
{
dummy() = default;
dummy(const dummy&) = delete;
call member;
};
}
所以 member 本质上会像任何其他对象方法一样工作,允许它被调用为:
dummy d;
d.member()
这将打印 call::operator()
。
现在我想使用绑定(bind)来做到这一点,最初的实现是这样的:
int main()
{
dummy d;
auto b = std::bind(&dummy::member, &d);
b();
return 0;
}
这会编译,但不会打印任何内容。我真的不明白发生了什么——它编译了,但没有产生输出这一事实让我感到困惑 :) std::bind
的内部确实发生了一些魔法,但是什么?
这是一个链接,可以玩代码: https://ideone.com/P81PND
最佳答案
目前,您的绑定(bind)返回一个成员,所以 b()
是 d.member
。
你必须调用 operator () :
b()(); // call::operator()
或者,您可以使用以下任何一种:
b = std::bind(&call::operator(), &d.member);
b = [&]() {d.member();};
关于c++ - std::bind on member with call operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43716713/