我正在用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函数对象只是对函数指针的无用包装。那么,我宁愿直接使用函数指针。纠正这个错误的分析是这个问题的重点!
发布于 2013-02-01 09:30:51
我不太明白你的问题,<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中改编而来。
https://stackoverflow.com/questions/14642843
复制相似问题