Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
std::bind with member函数和c++; 我正在学习C++,我正在实验标准库的STD::BIN函数。因此,我理解std::bind允许包装函数并部分应用函数。这对于不是类的成员函数的函数非常有效。现在我尝试将std::bind与类成员函数和“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(); } #包括 #包括 一班{ 公众: Class1()=默认值; ~Class1()=默认值; 作废打印(标准::功能2){ 函数2(); }; }; 二级{ 公众: Class2()=默认值; ~Class2()=默认值; 无效测试_bind(){ std::function function2=std::bind(&Class2::print,this); 1.打印(功能2); } 作废打印(){ std::cout_C++ - Fatal编程技术网

std::bind with member函数和c++; 我正在学习C++,我正在实验标准库的STD::BIN函数。因此,我理解std::bind允许包装函数并部分应用函数。这对于不是类的成员函数的函数非常有效。现在我尝试将std::bind与类成员函数和“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(); } #包括 #包括 一班{ 公众: Class1()=默认值; ~Class1()=默认值; 作废打印(标准::功能2){ 函数2(); }; }; 二级{ 公众: Class2()=默认值; ~Class2()=默认值; 无效测试_bind(){ std::function function2=std::bind(&Class2::print,this); 1.打印(功能2); } 作废打印(){ std::cout

std::bind with member函数和c++; 我正在学习C++,我正在实验标准库的STD::BIN函数。因此,我理解std::bind允许包装函数并部分应用函数。这对于不是类的成员函数的函数非常有效。现在我尝试将std::bind与类成员函数和“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(); } #包括 #包括 一班{ 公众: Class1()=默认值; ~Class1()=默认值; 作废打印(标准::功能2){ 函数2(); }; }; 二级{ 公众: Class2()=默认值; ~Class2()=默认值; 无效测试_bind(){ std::function function2=std::bind(&Class2::print,this); 1.打印(功能2); } 作废打印(){ std::cout,c++,C++,让编译器根据传递的参数推断类型: std::function<void(void)> function2 = std::bind(&Class2::print, this); std::function2=std::bind(&Class2::print,this); 以上就够了 具有显式模板参数列表的版本如下所示: std::function<void(void)> function3 = std::bind<void(Class2::*)(),Cla

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

std::function<void(void)> function2 = std::bind(&Class2::print, this);
std::function2=std::bind(&Class2::print,this);
以上就够了

具有显式模板参数列表的版本如下所示:

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
std::function 3=std::bind(&Class2::print,this);
//绑定
/ \           / \
||----指向调用成员函数的对象实例类型的指针
|---指向成员函数的指针

不要使用
std::bind
,使用lambda。不要使用
bind
,而是使用lambda:
std::function 2=[this](){this->print();}
@Progear您编写的
std::bind
是错误的。请删除
部分。@Progear我认为最好使用lambda。一般建议现在就始终使用lambda。编译器可以以std::bind无法实现的方式优化lambda,而lambda可以实现std::bind(在c++14及更高版本中)所能做到的一切.看,谢谢你,现在清楚多了!