在std :: bind

时间:2017-11-28 13:09:47

标签: c++ c++11

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

Usage of std::bind

我看到如下声明:

auto callback = std::bind(&MyClass::afterCompleteCallback, this, std::placeholders::_1);

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

1 个答案:

答案 0 :(得分:5)

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

所以你可以在课堂上注意到这一点,并提供“当前”对象作为第一个绑定参数。

或者您可以在课外进行,如果成员可以访问,并提供某些对象(如@Scheff pointed out):

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

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

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

callback(myClass, /*Other arg*/);

此外,尽管你标记了。随着中对lambda的更改,我们没有理由再使用std::bind