gpt4 book ai didi

C++ (C++11) 中的函数对象

转载 作者:行者123 更新时间:2023-12-03 00:52:28 25 4
gpt4 key购买 nike

我正在阅读有关 boost::function 的内容,我对它的使用以及它与我在文档中找到的其他 C++ 结构或术语的关系有点困惑,例如here .

在 C++ (C++11) 上下文中,boost::function 实例、函数对象仿函数lambda 表达式?什么时候应该使用哪种结构?例如,什么时候应该将函数对象包装在 boost::function 中,而不是直接使用该对象?

上述所有 C++ 是否都构造了不同的方法来实现函数式语言中所谓的闭包(一个函数,可能包含捕获的变量,可以作为值传递并由其他函数调用) )?

最佳答案

函数对象和仿函数是同一件事;实现函数调用运算符 operator() 的对象。 lambda 表达式生成一个函数对象。具有 boost::function/std::function 某种特化类型的对象也是函数对象。

Lambda 的特殊之处在于 lambda 表达式具有匿名且唯一的类型,并且是创建内联仿函数的便捷方法。

boost::function/std::function 的特殊之处在于,它将任何可调用实体转换为仿函数,其类型仅取决于可调用实体的签名实体。例如,每个 lambda 表达式都有唯一的类型,因此很难在非通用代码中传递它们。如果您从 lambda 创建一个 std::function ,那么您可以轻松地传递包装的 lambda。

关于C++ (C++11) 中的函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com