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

时间:2013-02-01 09:08:25

标签: c++ callback functional-programming

我正在用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函数对象只是对函数指针的无用包装。我宁愿直接使用函数指针,然后。纠正这个错误的分析就是这个问题的重点!

1 个答案:

答案 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