这可能是一个愚蠢和愚蠢的事情 - 但我想了解这里发生了什么.
我有以下代码:
#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;
};
}
Run Code Online (Sandbox Code Playgroud)
因此,member本质上可以像任何其他对象方法一样工作,允许它被调用为:
dummy d;
d.member()
Run Code Online (Sandbox Code Playgroud)
哪个会打印call::operator()
.
现在我想使用bind来做到这一点,初始实现看起来像这样:
int main()
{
dummy d;
auto b = std::bind(&dummy::member, &d);
b();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译,但没有打印.我真的不明白发生了什么 - 它编译的事实,但产生没有输出困惑我:)当然一些魔法正在肚子里面std::bind
,但是什么?
以下是使用代码的链接:https: //ideone.com/P81PND
目前,您的绑定返回一个成员,所以b()
是d.member
.您必须在上面调用operator():
b()(); // call::operator()
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用以下任何一种:
b = std::bind(&call::operator(), &d.member);
b = [&]() {d.member();};
Run Code Online (Sandbox Code Playgroud)