std::function和std::invoke是兩個不同的東西,功能也不同。std::function 是一個函數對象的封裝器,可以用來封裝任意類型的可調用對象,比如函數指針、lambda表達式等,而 std::invoke 則是一個函數模板,用于在統一的接口下調用可調用對象。
比如,我們可以使用 std::function 來存儲一個函數指針:
void foo(int a, int b)
{
std::cout << "foo(" << a << ", " << b << ")" << std::endl;
}
int main()
{
std::function<void(int, int)> f = foo;
f(1, 2);
}
上述代碼中,我們將函數指針 foo 封裝成了一個 std::function 對象 f,然后通過調用 f(1, 2) 來調用函數 foo。
std::invoke 的作用是提供一種通用的函數調用語法,可以用統一的方式來調用各種可調用對象,而不必關心它們具體是什么類型。
比如,可以使用 std::invoke 來調用一個東西,無論這個東西是函數指針、函數對象還是成員函數指針:
#include
#include
void foo(int a, int b)
{
std::cout << "foo(" << a << ", " << b << ")" << std::endl;
}
class Bar {
public:
void bar(int a, int b) const
{
std::cout << "Bar::bar(" << a << ", " << b << ")" << std::endl;
}
};
int main()
{
std::invoke(foo, 1, 2);
Bar b;
std::invoke(&Bar::bar, &b, 1, 2);
}
上面代碼,使用 std::invoke 分別調用了函數 foo 和類 Bar 的成員函數 bar,并傳遞了相應的參數。
總結,std::function 和 std::invoke 的使用場景是不同的。std::function 適用于需要存儲可調用對象的場景,而 std::invoke 則適用于統一調用各種不同類型的可調用對象的場景。
審核編輯 :李倩
-
Function
+關注
關注
0文章
14瀏覽量
10307 -
封裝器
+關注
關注
0文章
7瀏覽量
5987 -
invoke
+關注
關注
0文章
4瀏覽量
2082
原文標題:function與invoke的區別
文章出處:【微信號:程序喵大人,微信公眾號:程序喵大人】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
轉載---verilog中task和function的區別
MATLAB的S-Function編寫指導
換向機能 Reversal Function
形似亞馬遜Echo:哈曼卡頓Cortana智能音箱Invoke預計8月份上市
C++ function技術的實現與具體運用
std::function簡介及模板類聲明
在Java方法中調用Lua function
C++ invoke與function的區別在哪?
function與invoke的區別
評論