日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

std::bind 详解及参数解析

發布時間:2023/12/4 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 std::bind 详解及参数解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// Bind_std_function.cpp : 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include <iostream> #include <functional> #include <random> #include <memory> //學習bind的用法 void f(int n1, int n2, int n3, const int & n4, int n5) {std::cout << n1 << ' ' << n2 << ' ' << n3 << ' ' << n4 << ' ' << n5 << "\n"; }int g(int n1) {return n1 + 100; } struct Foo {Foo() = default;Foo(const Foo & a){data = a.data;std::cout << "復制構造" << std::endl;}void print_sum(int n1, int n2){std::cout << n1 + n2 << '\n';}int data = 10; };// //std::bind的不同的placeholders個數證明調用函數體時需要傳入的參數量及位置 //std::bind的時候目標的函數的參數的順序與bind的時候的順序的一一對應的 //int _tmain(int argc, _TCHAR* argv[]) {int n = 7;auto f1 = std::bind(f, std::placeholders::_2, std::placeholders::_1, 43, std::cref(n), n);//第一位置 目標函數(f)的第一個參數 是調用時傳的第二個參數//第二位置 目標函數(f)的第二個參數 是調用時傳的第一個參數//第三位置 目標函數(f)的第三個參數 是43//第四位置 目標函數(f)的第四個參數 是n的按址傳遞//第五位置 目標函數(f)的第五個參數 是nn = 10;f1(1, 2);//相當于f(2,1,43,10,7);using namespace std::placeholders;auto f2 = std::bind(f, _3, std::bind(g, _3), _3, 4, 5);//第一位置 目標函數f的第一個參數 是調用時傳的第三個參數//第二位置 目標函數f的第二個參數 是調用時傳的g(第三個參數)//第三位置 目標函數f的第三個參數 是調用時傳的第三個參數//第四位置 目標函數f的第四個參數 是4//第五位置 目標函數f的第五個參數 是5//由此可見,調用時的第一個參數和第二個參數是沒有用的。調用時你把第一個或第二個參數傳多少都是沒有用的f2(1000, 2000, 55);//f(55,g(55),55,4,5);// common use case: binding a RNG with a distribution std::default_random_engine e;std::uniform_int_distribution<> d(0, 10);std::cout << d(e) << std::endl;//生成一個隨機數 std::function<int()> rnd = std::bind(d, e);//rnd就相當于d(e)for (int n = 0; n < 10; ++n)std::cout << rnd() << ' ';std::cout << '\n';//綁定類成員函數用對象的指針 Foo foo;auto f3 = std::bind(&Foo::print_sum, &foo, 95, _1);f3(5);// 綁定類成員變量std::cout << "測試綁定類成員" << std::endl;auto f4 = std::bind(&Foo::data, _1);std::cout << f4(foo) << '\n';//std::cout << f4(&foo) << '\n';//嘗試傳入類對象指針編譯不通過std::cout << f4(std::cref(foo)) << '\n';//引用包裝傳遞//測試發現vs2013不支持Foo的智能指針做為f4的參數system("pause");return 0; }

?

總結

以上是生活随笔為你收集整理的std::bind 详解及参数解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。