如何使用std :: bind与lambda

时间:2016-01-18 20:20:01

标签: c++ c++11 lambda std stdbind

我正在尝试在我的lambda中使用std :: bind:

#include <functional>
#include <iostream>
#include <string>

struct Foo {
    Foo() {}
    void func(std::string input)
    {
        std::cout << input << '\n';
    }

    void bind()
    {
        std::cout << "bind attempt" << '\n';
        auto f_sayHello = [this](std::string input) {std::bind(&Foo::func, this, input);};
        f_sayHello("say hello");
    }
};

int main()
{
    Foo foo;
    foo.bind();    
}

运行此代码时我所期望的是看到以下输出

bind attempt
say hello

但我只看到“绑定尝试”。我很确定有些东西我不理解lambda。

1 个答案:

答案 0 :(得分:4)

std::bind(&Foo::func, this, input);

这会调用std::bind,这会创建一个调用this->func(input);的仿函数。但是,std::bind本身并不会调用this->func(input);

您可以使用

auto f = std::bind(&Foo::func, this, input);
f();

std::bind(&Foo::func, this, input)();

但在这种情况下,为什么不以简单的方式写出来呢?

this->func(input);