最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++中的bind使用方法

 更新時(shí)間:2022年01月06日 09:43:33   作者:xutopia  
bind是這樣一種機(jī)制,它可以預(yù)先把指定可調(diào)用實(shí)體的某些參數(shù)綁定到已有的變量,產(chǎn)生一個(gè)新的可調(diào)用實(shí)體,這種機(jī)制在回調(diào)函數(shù)的使用過(guò)程中也頗為有用。接下來(lái)通過(guò)本文給大家介紹c++中的bind使用方法,感興趣的朋友一起看看吧

除了容器有適配器之外,其實(shí)函數(shù)也提供了適配器,適配器的特點(diǎn)就是將一個(gè)類型改裝成為擁有子集功能的新的類型。其中函數(shù)的適配器典型的就是通過(guò)std::bind來(lái)實(shí)現(xiàn)。

std::bind函數(shù)定義在頭文件functional中,是一個(gè)函數(shù)模板,它就像一個(gè)函數(shù)適配器,接受一個(gè)可調(diào)用對(duì)象(callable object),生成一個(gè)新的可調(diào)用對(duì)象來(lái)“適應(yīng)”原對(duì)象的參數(shù)列表。一般而言,我們用它可以把一個(gè)原本接收N個(gè)參數(shù)的函數(shù)fn,通過(guò)綁定一些參數(shù),返回一個(gè)接收M個(gè)(M可以大于N,但這么做沒(méi)什么意義)參數(shù)的新函數(shù)。同時(shí),使用std::bind函數(shù)還可以實(shí)現(xiàn)參數(shù)順序調(diào)整等操作。

可調(diào)用 (Callable) 中描述,調(diào)用指向非靜態(tài)成員函數(shù)指針或指向非靜態(tài)數(shù)據(jù)成員指針時(shí),首參數(shù)必須是引用或指針(可以包含智能指針,如 std::shared_ptrstd::unique_ptr),指向?qū)⒃L問(wèn)其成員的對(duì)象。

官方示例

#include <random>
#include <iostream>
#include <memory>
#include <functional>
 
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;
}
 
struct Foo {
    void print_sum(int n1, int n2)
    {
        std::cout << n1+n2 << '\n';
    }
    int data = 10;
};
 
int main()
{
    using namespace std::placeholders;  // 對(duì)于 _1, _2, _3...
 
    // 演示參數(shù)重排序和按引用傳遞
    int n = 7;
    // ( _1 與 _2 來(lái)自 std::placeholders ,并表示將來(lái)會(huì)傳遞給 f1 的參數(shù))
    auto f1 = std::bind(f, _2, 42, _1, std::cref(n), n);
    n = 10;
    f1(1, 2, 1001); // 1 為 _1 所綁定, 2 為 _2 所綁定,不使用 1001
                    // 進(jìn)行到 f(2, 42, 1, n, 7) 的調(diào)用
 
    // 嵌套 bind 子表達(dá)式共享占位符
    auto f2 = std::bind(f, _3, std::bind(g, _3), _3, 4, 5);
    f2(10, 11, 12); // 進(jìn)行到 f(12, g(12), 12, 4, 5); 的調(diào)用
 
    // 常見(jiàn)使用情況:以分布綁定 RNG
    std::default_random_engine e;
    std::uniform_int_distribution<> d(0, 10);
    std::function<int()> rnd = std::bind(d, e); // e 的一個(gè)副本存儲(chǔ)于 rnd
    for(int n=0; n<10; ++n)
        std::cout << rnd() << ' ';
    std::cout << '\n';
 
    // 綁定指向成員函數(shù)指針
    Foo foo;
    auto f3 = std::bind(&Foo::print_sum, &foo, 95, _1);
    f3(5);
 
    // 綁定指向數(shù)據(jù)成員指針
    auto f4 = std::bind(&Foo::data, _1);
    std::cout << f4(foo) << '\n';
 
    // 智能指針亦能用于調(diào)用被引用對(duì)象的成員
    std::cout << f4(std::make_shared<Foo>(foo)) << '\n'
              << f4(std::make_unique<Foo>(foo)) << '\n';
}

輸出:

2 42 1 10 7
12 12 12 4 5
1 5 0 2 0 8 2 2 10 8
100
10
10
10

到此這篇關(guān)于c++中的bind使用方法的文章就介紹到這了,更多相關(guān)c++ bind使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談C#互操作的內(nèi)存溢出問(wèn)題

    淺談C#互操作的內(nèi)存溢出問(wèn)題

    以前了解過(guò)c++的棧內(nèi)存溢出,沒(méi)想到在c#里被我遇到了,問(wèn)題看似不大,如何被恰好相鄰的四個(gè)字節(jié)是返回地址,說(shuō)不定危害不小啊!看來(lái)c#的互操作還是得小心為好
    2013-10-10
  • C++深入探究類與對(duì)象之友元與運(yùn)算符重載

    C++深入探究類與對(duì)象之友元與運(yùn)算符重載

    友元就是讓一個(gè)函數(shù)或者類,訪問(wèn)另一個(gè)類中的私有成員;打個(gè)比方,這相當(dāng)于是說(shuō):朋友是值得信任的,所以可以對(duì)他們公開(kāi)一些自己的隱私,運(yùn)算符重載的實(shí)質(zhì)就是函數(shù)重載或函數(shù)多態(tài),運(yùn)算符重載是一種形式的C++多態(tài),目的在于讓人能夠用同名的函數(shù)來(lái)完成不同的基本操作
    2022-04-04
  • C++實(shí)現(xiàn)查找中位數(shù)的O(N)算法和Kmin算法

    C++實(shí)現(xiàn)查找中位數(shù)的O(N)算法和Kmin算法

    這篇文章主要介紹了C++實(shí)現(xiàn)查找中位數(shù)的O(N)算法和Kmin算法,對(duì)于C++程序算法設(shè)計(jì)有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • C++未定義行為(undefined behavior)

    C++未定義行為(undefined behavior)

    對(duì)于未定義行為,C++標(biāo)準(zhǔn)沒(méi)有明確規(guī)定編譯器們應(yīng)該怎么做,那么執(zhí)行的結(jié)果就是不可預(yù)料的。下面我們來(lái)詳細(xì)探討下
    2017-02-02
  • C語(yǔ)言中數(shù)據(jù)結(jié)構(gòu)之鏈表歸并排序?qū)嵗a

    C語(yǔ)言中數(shù)據(jù)結(jié)構(gòu)之鏈表歸并排序?qū)嵗a

    這篇文章主要介紹了C語(yǔ)言中數(shù)據(jù)結(jié)構(gòu)之鏈表歸并排序?qū)嵗a的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++ 中的 mutable關(guān)鍵字作用與使用場(chǎng)景分析(最新推薦)

    C++ 中的 mutable關(guān)鍵字作用與使用場(chǎng)景分析(最新推薦)

    C++中的mutable關(guān)鍵字允許在常量成員函數(shù)中修改特定成員變量,主要用于緩存機(jī)制、延遲計(jì)算和多線程同步等場(chǎng)景,它在設(shè)計(jì)中提供靈活性,但使用時(shí)需謹(jǐn)慎,本文介紹C++ 中的 mutable關(guān)鍵字作用與使用場(chǎng)景分析,感興趣的朋友一起看看吧
    2025-02-02
  • C++實(shí)現(xiàn)學(xué)生管理系統(tǒng)示例解析

    C++實(shí)現(xiàn)學(xué)生管理系統(tǒng)示例解析

    這篇文章主要介紹了C++實(shí)現(xiàn)學(xué)生管理系統(tǒng)示例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • C語(yǔ)言歸排與計(jì)排深度理解

    C語(yǔ)言歸排與計(jì)排深度理解

    這篇文章主要為大家詳細(xì)的介紹了C語(yǔ)言中計(jì)數(shù)排序和歸并排序,歸并排序是創(chuàng)建在歸并操作上的一種有效的排序算法,計(jì)數(shù)排序不用比較兩個(gè)數(shù)的大小,感興趣的朋友可以參考閱讀
    2023-04-04
  • 詳解c++20協(xié)程如何使用

    詳解c++20協(xié)程如何使用

    這篇文章主要介紹了詳解c++20協(xié)程如何使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之串插入操作

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之串插入操作

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之串插入操作的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10

最新評(píng)論

泸州市| 章丘市| 安陆市| 祁门县| 广州市| 克拉玛依市| 邢台县| 华蓥市| 应用必备| 大化| 惠东县| 休宁县| 渑池县| 西城区| 松阳县| 宣城市| 铜川市| 台北市| 泗洪县| 白城市| 依安县| 南涧| 辉县市| 元氏县| 龙井市| 牡丹江市| 东宁县| 临安市| 且末县| 英德市| 措美县| 杨浦区| 大竹县| 保德县| 荥经县| 汾西县| 西林县| 宁都县| 陆川县| 英吉沙县| 绵竹市|