<functional> C++03 中函数对象的兴趣是什么?
What is the interest of <functional> function objects in C++03?
我正在用C++的http服务器编写一个包装器。我的编译器只支持 C++03 (gcc 4.1.2),我不能使用 boost。
我想实现一个通用的回调机制来响应请求,能够注册函数或对象方法或静态对象方法。
快速浏览<functional>
函数对象(C++03,http://www.cplusplus.com/reference/functional/)让我认为这就是答案。
但是,似乎<functional>
函数对象并不意味着提供通用的回调机制。
所以我想知道:C++03 中<functional>
函数对象有什么用?它们的用途是什么?与简单的函数指针相比,它们应该提供哪些真正的好处?还是 C++03 版本有缺陷,只有 C++11 版本才真正有用?
[编辑] 对于我最初所理解的,在我看来,C++03 函数对象只是对函数指针的无用包装。那么,我宁愿直接使用函数指针。纠正这种错误的分析是这个问题的重点!
我真的不明白你的问题,<functional>
是一个标题,而不是一种机制。 标头提供了用于方便地创建函数对象的实用程序。 举一个简单的例子,假设你想调用 transform,将一个范围的元素乘以另一个,并将结果存储在第三个区域中。 你可以定义一个这样的函数:
double mult(double lhs, double rhs) { return lhs * rhs; };
然后这样称呼它:
std::transform(lhs.begin(), lhs.end(), rhs.begin(), out.begin(), mult);
或者您可以使用已经为您定义的std::multiplies
:
std::transform(lhs.begin(), lhs.end(), rhs.begin(), out.begin(), std::multiplies<double>());
还有许多其他例子。 你只需要有创造力。 C++11 lambda 使<functional>
中的许多工具过时,或者至少变得不那么有用,因为您可以只定义与算法调用内联的函数。
我想实现一个通用的回调机制来回答 请求
C++03版本的<functional>
对此没有帮助。 C++11版本确实,std::function
改编自boost::function
。
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 是什么让放置新调用对象的构造函数?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 为对象分配整数.输出将是什么?
- 在C++中,创建'n'数量的对象的推荐方法是什么,其中n是用户定义的。我该怎么做?
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- 处理从列表中删除指向对象的指针的"healthy"方法是什么?
- 在C++中返回 IO 对象的目的是什么?
- 在C++中有多个指向单个对象的指针的正确方法是什么?
- 初始化对象以在 C++08 中作为参数传递的首选语法是什么?
- 将(临时的?)std::string传递给使用它来构造一个接受副本的对象的函数的最佳方法是什么?
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 使用对函数和IO对象的引用(作为参数)的目的是什么
- 这些情况有什么区别?我怎么知道什么是临时对象?
- 在多个对象中初始化预定义成员变量的正确方法是什么?
- 在 c++ 中重置大型对象实例的最佳方法是什么
- 将对象传递给模板构造函数或方法的正确方法是什么
- 面向对象概念的例子车,这里应该是什么对象