繁体   English   中英

std::bind 与成员 function 和 c++

[英]std::bind with member function and this in c++

我正在尝试学习 C++ 并且正在尝试使用标准库的 std::bind function 。 结果,我了解到 std::bind 允许包装 function 并部分应用 function。 这非常适用于不是 class 的成员函数的函数。 现在我尝试将 std::bind 与 class 成员函数和“this”指针一起使用,但我无法编译并且不知道如何解决这个问题。 有人可以帮助我真正理解 std::bind 吗?

#include <iostream>
#include <functional>

class Class1 {
    public:
        Class1() = default;
        ~Class1() = default;
        void print(std::function<void(void)> function2) {
            function2();
        };
};

class Class2 {
    public:
        Class2() = default;
        ~Class2() = default;
        void test_bind() {
            std::function<void(void)> function2 = std::bind<void(void)>(&Class2::print, this);
            class1.print(function2);
        }
        void print() {
            std::cout << "CLASS 2" << std::endl;
        };

        Class1 class1;
};


int main(int ac, char **av)
{
    Class2 class2;

    class2.test_bind();
}

让编译器根据传递的 arguments 推断类型:

std::function<void(void)> function2 = std::bind(&Class2::print, this);

以上就够了。

带有显式模板 arguments 列表的版本如下所示:

std::function<void(void)> function3 = std::bind<void(Class2::*)(),Class2*>(&Class2::print, this);

// std::bind<void(Class2::*)(),Class2*>
               / \           / \
                |             |---- pointer to type of object instance you invoke member function 
                |--- pointer to member function

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM