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; }
0801-----C++Primer听课笔记----------C++11新特性 function 和 bind 的简单使用,古老的榕树,5-wow.com
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。