これは愚かで愚かなことかもしれませんが、ここで何が起こっているのか理解したいと思います。 call::operator()
を印刷しstd :: bind on call operator
dummy d;
d.member()
:
#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;
};
}
だからメンバーは、本質的に、それは次のように呼び出すことができるように、他のオブジェクトのメソッドのように動作します:
は、私は、次のコードを持っています。
今、私はそれを行うためにバインドを使用したいと思い、最初の実装は、このように見えた:
int main()
{
dummy d;
auto b = std::bind(&dummy::member, &d);
b();
return 0;
}
これはコンパイルしますが、何も印刷されません。私は実際に起こっていることを理解していない - それはコンパイルするが、出力パズルを生成しないという事実私は確かにいくつかの魔法はstd::bind
の腹の中で起こっているが、何?ここで
は、コードと遊ぶためのリンクです: https://ideone.com/P81PND
あなたは正しいです! :)私たちはちょうどそれを自分自身から見つけました。 'std :: bind'はメンバを返すだけで、今日何か新しいことを学んだことになります - ありがとう! – mortenvp
@mortenvp:Lambdaは 'std :: bind'をとにかく役に立たないようにします。将来のバージョンのC++で非推奨にすることについての議論があります。 http://stackoverflow.com/questions/33835922/why-should-bind-be-deprecated –
@ Jarod42を参照してください。意外にも、 'std :: cref' - 下記を参照してください。 –