這可能是一個愚蠢和愚蠢的事情要做 - 但我想了解這裏發生了什麼。std ::綁定在調用操作員的成員
我有以下代碼:
#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;
};
}
所以基本上員會工作像任何其他對象的方法,允許它被調用爲:
dummy d;
d.member()
這將打印call::operator()
。
現在我想用綁定來做到這一點,初步實現是這樣的:
int main()
{
dummy d;
auto b = std::bind(&dummy::member, &d);
b();
return 0;
}
這編譯,但沒有打印。我真的不明白髮生了什麼事 - 它編譯的事實,但沒有產生輸出困惑我:)肯定有一些魔術在std::bind
肚子裏,但什麼?
下面是代碼打一個鏈接: https://ideone.com/P81PND
你是對的! :)我們只是發現自己。 'std :: bind'只會返回成員,今天學到了一些新東西 - 謝謝! – mortenvp
@mortenvp:無論如何,Lambdas呈現'std :: bind'毫無用處。有人討論過在C++的未來版本中將其棄用。見http://stackoverflow.com/questions/33835922/why-should-bind-be-deprecated –
@ Jarod42,令人驚訝的是,'std :: cref' - 見下文。 –