Function 总结

在以下情形时使用 Function 库

  • 你需要保存一个回调函数或函数对象

  • 你想要从实现中解耦函数调用,例如在GUI和实现间的解耦

  • 你想要保存由 binder 库创建的函数对象,用于后续的调用或多次调用

Boost.Function 是对标准库的功能的重要补充。在回调机制中使用函数指针这样的著名技术被扩充至可以使用任何行为类似于函数的东西,包括由 binder 库创建的函数对象。通过使用 Boost.Function, 可以很容易地为回调增加状态,也可以把已有的类和成员函数进行适配后用作回调函数。

与使用函数指针相比,使用 Boost.Function 有几个优点:通过兼容的函数对象而不是真实的签名放松了对签名的要求;可以使用绑定器,如 Boost.Bind 和 Boost.Lambda;可以在调用函数之前检测函数是否为空,即是否存在目标函数;可以使用带状态的对象而不仅限于无状态函数。这些优点表明了使用 Boost.Function 替代C风格的回调可以解决这类普遍存在的问题。使用 Boost.Function 比使用函数指针要多付出一点点代价,只有这一点小代价是被禁止时,才应该考虑使用函数指针技术。

Boost.Function 由 Douglas Gregor 创建。它是一个拥有巨大威力的库,具有成熟的设计与实现,可以为用户提供额外的价值。