企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## Bind ### 头文件: `"boost/bind.hpp"` Bind 库创建函数对象来绑定到一个函数(普通函数或成员函数)。不需要直接给出函数的所有参数,参数可以稍后给,这意味着绑定器可以用于创建一个改变了它所绑定到的函数的 arity (参数数量) 的函数对象,或者按照你喜欢的顺序重排参数。 函数 `bind` 的重载版本的返回类型是未指定的,即不能保证返回的函数对象的特征是怎样的。有时,你需要将对象存于某处,而不是直接把它传送给另一个函数,这时,你要使用 Boost.Function, 它在 "[Library 11](../Text/content.html#ch11): [Function 11](../Text/content.html#ch11)." 中讨论。弄明白 `bind` 函数返回的是什么的关键在于,理解它发生了什么转换。用 `bind` 函数的一个重载,`template<class R, class F> unspecified-1 bind(F f)`来作为例子,返回类型就是 (引用自在线文档),"一个函数对象 l ,表达式 l(v1, v2, ..., vm) 等同于 f(),隐式转换为 R"。这样,这个被绑定的函数就被保存在绑定器里面,以后对这个函数对象的调用就会得到被绑定的函数的返回值(如果有),即模板参数 `R`. 我们在这讨论的实现支持最多九个函数参数。 Bind 的实现包括许多函数和类,但作为用户来说,我们不直接使用除了重载函数 `bind` 以外的任何东西。所有绑定通过 `bind` 函数发生,我们可以无须依赖于返回值的类型。使用 `bind` 时,参数占位符(命名为 `_1`, `_2`, 等等)不需要用一个using声明或using指示来引入,因为它们位于匿名名字空间。这样,在使用 Boost.Bind时,没有理由写出以下的代码。 ``` using boost::bind; using namespace boost; ``` 前面曾经提到过,当前的 Boost.Bind 实现支持九个占位符(`_1`, `_2`, `_3`, 等等),也就是说最多九个参数。粗略地过一下大纲对于深入理解如何进行类型推断是有好处的,还可以知道何时/为何它不总是可以工作的。花点时间分析一下成 员函数指针与普通函数的署名特征也是很有用的。你将会看到对于普通函数和类成员函数,各有各的重载版本。还有,对于每一个数量的参数,也都有不同的重载。 我不在这里列出所有大纲了,建议你到[www.boost.org](http://www.boost.org/)参考一下 Boost.Bind 的文档。