我正在用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函数对象只是对函数指针的无用包装。我宁愿直接使用函数指针,然后。纠正这个错误的分析就是这个问题的重点!
答案 0 :(得分:2)
我真的不明白你的问题,<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 lambdas已经使<functional>
中的许多工具过时了,或者至少没那么有用,因为你可以用你的算法调用来定义你的函数。
我想实现一个通用的回调机制来回答 请求
<functional>
的C ++ 03版本对此没有帮助。 C ++ 11版本与std::function
一起改编自boost::function
。