[英]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
參數的函數F
, bind(F)
返回一個可以用N
或更多個參數調用的調用包裝器。 如果綁定參數或使用占位符,則它將更改調用調用包裝器所需的最小參數數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.