当前位置:首页 > 资讯 > > 正文

一文弄懂function与invoke的区别

来源:面包芯语    时间:2023-05-29 21:50:17


(相关资料图)

std::functionstd::invoke是两个不同的东西,功能也不同。std::function是一个函数对象的封装器,可以用来封装任意类型的可调用对象,比如函数指针、lambda表达式等,而 std::invoke则是一个函数模板,用于在统一的接口下调用可调用对象。

比如,我们可以使用 std::function来存储一个函数指针:

上述代码中,我们将函数指针 foo封装成了一个 std::function对象 f,然后通过调用 f(1, 2)来调用函数 foo

std::invoke的作用是提供一种通用的函数调用语法,可以用统一的方式来调用各种可调用对象,而不必关心它们具体是什么类型。

比如,可以使用 std::invoke来调用一个东西,无论这个东西是函数指针、函数对象还是成员函数指针:

上面代码,使用 std::invoke分别调用了函数 foo和类 Bar的成员函数 bar,并传递了相应的参数。

关键词:

精心推荐

X 关闭

X 关闭