<functional> C++03 中函数对象的兴趣是什么?

What is the interest of <functional> function objects in C++03?

本文关键字:是什么 对象 lt functional gt C++03 函数      更新时间:2023-10-16

我正在用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

相关文章: