簡體   English   中英

std :: function和std :: bind行為

[英]std::function and std::bind behavior

我有這個代碼:

#include <iostream>
#include <functional>
#include <vector>

void fun()
{
    std::cout<<"fun";
}

void gun(int)
{
    std::cout<<"gun";
}

int main()
{
    std::vector<std::function<void(int)>> vec;

    vec.push_back(std::bind(fun));
    vec.push_back(gun);

    vec[0](1);
    vec[1](2);
}

你能解釋一下std::bind在綁定void()函數時如何返回std::function<void(int)>

如何使用void(int)函數調用void()函數?

作為function的模板參數傳遞的簽名僅確定將綁定多少個占位符( _1 )以及哪些類型。

實際函數的調用僅使用綁定函數實際需要的參數數量。 實際上,忽略了多余的參數。

另一個更具啟發性(?)的例子,從另一方面看這個:

#include <iostream>
#include <functional>

void gun(int i)
{
    std::cout<<"gun("<<i<<")";
}

int main()
{
    using namespace std::placeholders;
    std::bind(gun, _5)("ignore", 3, "and", 4, 43);
}

打印

gun(43)

如何使用void(int)函數調用void()函數?

std::bind(fun)不返回void()函數,它返回一個未指定類型的調用包裝器。

調用該調用包裝器的常用方法是使用零參數,但在大多數bind()實現中,可以使用零個或多個參數調用該類型,並忽略其他參數(即不傳遞給目標函數)

更一般地,對於帶有N參數的函數Fbind(F)返回一個可以用N或更多個參數調用的調用包裝器。 如果綁定參數或使用占位符,則它將更改調用調用包裝器所需的最小參數數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM