全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

function与invoke的区别

时间:2023-04-27 15:13

人气:

作者:admin

标签: invoke  封装器  Function 

导读:std::function和std::invoke是两个不同的东西,功能也不同。std::function 是一个函数对象的封装器,可以用来封装任意类型的可调用对象,比如函数指针、lambda表达式等...

std::functionstd::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<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::functionstd::invoke 的使用场景是不同的。std::function 适用于需要存储可调用对象的场景,而 std::invoke 则适用于统一调用各种不同类型的可调用对象的场景。


审核编辑 :李倩


温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信