【发布时间】:2017-05-01 09:06:43
【问题描述】:
这可能是一件愚蠢而愚蠢的事情 - 但是我想了解这里发生了什么。
我有以下代码:
#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
【问题讨论】: