首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><functional>函数对象在C++03中的兴趣是什么?

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

Stack Overflow用户
提问于 2013-02-01 09:08:25
回答 1查看 861关注 0票数 3

我正在用C++编写一个http服务器的包装器。我的编译器只支持C++03 (gcc 4.1.2),我不能使用boost。

我想要实现一个通用的回调机制来响应请求,能够注册一个函数、一个对象方法或一个静态对象方法。

<functional>函数对象(C++03,http://www.cplusplus.com/reference/functional/)的快速浏览使我认为这是答案。

但是,<functional>函数对象似乎并不打算提供一个通用的回调机制。

所以我想知道:<functional>函数对象在C++03中的用途是什么?它们的目的是什么?相对于简单的函数指针,它们应该提供什么真正的好处?或者C++03版本有缺陷,只有C++11版本是有用的?

编辑我最初理解的内容,在我看来,C++03函数对象只是对函数指针的无用包装。那么,我宁愿直接使用函数指针。纠正这个错误的分析是这个问题的重点!

EN

回答 1

Stack Overflow用户

发布于 2013-02-01 09:30:51

我不太明白你的问题,<functional>是一个标题,而不是一个机制。报头为方便地生成函数对象提供了实用程序。作为一个简单的例子,假设您想调用transform,将一个范围的元素乘以另一个,并将结果存储在第三个区域中。您可以定义如下函数:

代码语言:javascript
复制
double mult(double lhs, double rhs) { return lhs * rhs; };

那就这样说吧:

代码语言:javascript
复制
std::transform(lhs.begin(), lhs.end(), rhs.begin(), out.begin(), mult);

或者您可以使用std::multiplies,它已经为您定义了:

代码语言:javascript
复制
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中改编而来。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14642843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档