首页 > 代码库 > 0801-----C++Primer听课笔记----------C++11新特性 function 和 bind 的简单使用
0801-----C++Primer听课笔记----------C++11新特性 function 和 bind 的简单使用
1.function 和 函数指针
1.1 function有函数指针的功能,但是使用起来明显比函数指针更加灵活和方便。
1.2 函数指针和function的用法实例。
1.2.1 函数指针首先要清楚函数指针的类型,如void (*)(int, char)等,然后声明一函数指针变量直接调用即可。
#include <iostream>using namespace std;/* * 函数指针的用法 */void test(int i,double j){ cout << i << " " << j << endl;}int main(int argc, const char *argv[]){ void (*fp)(int, double); fp = test; fp(3, 2.3);
1.2.2 function 和函数指针类型,需要函数的类型,定义一个该类的对象,用法和函数指针相同。
#include <iostream>#include <functional>using namespace std;/* * c++11 function * */void test(int i,double j){ cout << i << " " << j << endl;}int main(int argc, const char *argv[]){ function<void (int, double)> fp; fp = test; fp(3, 2.3); return 0;}
2.function 和 bind 的简单使用
2.1 bind函数用来将一个function对象和一个函数实现绑定,这里使用了占位符,这里占位符所占的位置是调用的时候的位置。
2.2 程序示例。
#include <iostream>#include <string>#include <functional>using namespace std;/* * bind 实现function的任意绑定 * */void test(int i, double d, const string &s){ cout << "i = " << i << " d = " << d << " s = " << s << endl;}int main(int argc, const char *argv[]){ //1.void(*)(int, double) function <void (int, double)> fp; string s = "fp..."; fp = bind(&test, std::placeholders::_1, std::placeholders::_2, s); fp(1, 1.1); //2. void(*)(double, int, const string &) function <void (double, int, const string &)> fp2; fp2 = bind(&test, std::placeholders::_2, std::placeholders::_1, std::placeho lders::_3); fp2(2.2, 2, "fp2..."); //3. void(*)(const string &, int) function <void (const string &)> fp3; fp3 = bind(&test, 3, 3.3, std::placeholders::_1); fp3("fp3..."); //4. void(*)(const string &, int , double) function <void (const string &, int, double)> fp4; fp4 = bind(&test, std::placeholders::_2, std::placeholders::_3, std::placeho lders::_1); fp4("fp4...", 4, 4.4); //5. void(*)(int) function <void (int)> fp5; fp5 = bind(&test, std::placeholders::_1, 5.5, "fp5..."); fp5(5); //6. void(*)(const string &) function <void (const string &)> fp6; fp6 = bind(&test, 6, 6.6, std::placeholders::_1); fp6("fp6..."); //7. void(*)() function <void ()> fp7; fp7 = bind(&test, 7, 7.7, "fp7..."); fp7(); return 0;}
2.3 function和bind的使用示例。
#include <iostream>#include <string>#include <vector>#include <functional>using namespace std;/* * c++11 function * */// void (*)()void test(){ cout << "test... " << endl;}class Test{ public: //void (*)() static void test_static(){ cout << "test static ..." << endl; } //void (Test::*)() //含有隐式参数 Test * void test2(){ cout << "test2... In Test" << endl; } //void (Test::*)(int) void test3(int i){ cout << i << " test3 ... In Test" << endl; }};int main(int argc, const char *argv[]){ function<void ()> fp; fp = test; fp(); fp = Test::test_static; // static 函数名包含类名 fp(); Test t; fp = bind(&Test::test2, &t); //绑定一个对象的指针 fp(); fp = bind(&Test::test3, &t, 3); fp(); // test3 转换成 void (*)(int)类型的 function<void (int)> fp2; fp2 = bind(&Test::test3, &t, std::placeholders::_1); fp2(2000); return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。