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

标签 function boost c++11 functional-programming functor

我正在阅读有关 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/

相关文章:

c++ - Boost MPL排序模板参数包

c++ - CMake FindBoost.cmake MinGW-W64 : searching for library with incorrect name

c++ - std::atomic 的锁在哪里?

python - 找到三个数字的中间

arrays - 尝试通过函数访问 bash 数组会导致 ${1[@]} : bad substitution

JavaScript:调用类对象的函数将值添加到对象数组中

c++ - boost 程序选项 : linking error

c++11 - 64 位系统上的函数重载、整数类型和 std::size_t

c++ - 整数对散列函数的错误

python - 为什么我的 python 函数没有定义,当它存在于同一个文件中时?