在std :: bind中使用此指针

Pro*_*mer 0 c++ c++11

std::bind当我偶然发现以下答案时,我试图阅读和理解:

std :: bind的用法

我看到如下的一个陈述:

auto callback = std::bind(&MyClass::afterCompleteCallback, this, std::placeholders::_1);
Run Code Online (Sandbox Code Playgroud)

我无法理解'this'指针的用法是什么,何时应该使用它?'this'指针意味着当前的对象地址本身,所以它意味着'使用这个对象' - 如果是这样的话我怎么能在类之外使用相同的语句仍具有相同的含义?

Sto*_*ica 6

在课堂上,课外,这对使用并不重要std::bind.必须使用其所属类的有效对象调用非静态成员函数.std::bind认为该对象是在可调用,简单和简单之后给出的第一个参数.

所以你可以在课堂上注意到它,并提供"当前"对象作为第一个绑定参数.

或者你可以在课外进行,如果成员可以访问,并提供一些对象(如@Scheff所指出的):

MyClass myClass; 
using namespace std::placeholders;
auto callback = std::bind(&MyClass::afterCompleteCallback, &myClass, _1);
Run Code Online (Sandbox Code Playgroud)

您甚至可以选择不绑定对象,并为其保留占位符:

MyClass myClass; 
using namespace std::placeholders;
auto callback = std::bind(&MyClass::afterCompleteCallback, _1, _2);

callback(myClass, /*Other arg*/);
Run Code Online (Sandbox Code Playgroud)

此外,尽管您标记了.随着对lambdas的更改,实际上没有理由再使用std::bind了.