std::function和std::invoke是两个不同的东西,功能也不同。std::function 是一个函数对象的封装器,可以用来封装任意类型的可调用对象,比如函数指针、lambda表达式等,而 std::invoke 则是一个函数模板,用于在统一的接口下调用可调用对象。
比如,我们可以使用 std::function 来存储一个函数指针:
#include #include void foo(int a, int b){ std::cout << foo( << a << , << b << ) << std::endl;}int main(){ std::function 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 则适用于统一调用各种不同类型的可调用对象的场景。
Windows 10 Version 2004(20H1)功能更新确认 多个功能成为可选功能
STM32嵌入式显示器创建一个有答案的生态系统
WD My Cloud Home ——智能云端家庭生活
用3.8元芯片合宙Air32自制轮腿机器人,靠谱吗
中兴Axon 40 Ultra搭载全新一代骁龙8移动平台
function与invoke的区别
概述电路设计与软件编程的另类思路
集成功率级LED与恒流源电路一体化设计
NVIDIA第二代 NVIDIA OVX为全球用户带来更强大的性能
日本运营商:交通号志灯的5G设备测试将于2020财年在多个城市启动
农田小型气象站介绍
参加网约车考试的大部分人居然都是原出租车司机
一种用于评估药物体外递送效果的肺-肿瘤-血管芯片模型
在政策推动之下,我国新能源汽车行业发展迅速
基于深度学习的机器人目标识别和跟踪
华为首款开放式耳机正式发布,创新C形设计引领科技时尚新浪潮
为争取EUV顶级光刻机供货,三星负责人拜访AMSL荷兰总部游说
科学家开发袖珍型粒子加速器,投射超过光速99.99%超短电子束的激光
MAX5977A设计的1V-16V热插拔控制方案
电子系统进行读片成为一个标准