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浏览量
9912 -
封装器
+关注
关注
0文章
7浏览量
5873 -
invoke
+关注
关注
0文章
4浏览量
1999
原文标题:function与invoke的区别
文章出处:【微信号:程序喵大人,微信公众号:程序喵大人】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论