C中的函数对象(C 11)

前端之家收集整理的这篇文章主要介绍了C中的函数对象(C 11)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在阅读有关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++相关文章