30

我注意到,当将引用参数传递给 boost 绑定时,这些参数不会像引用一样起作用。相反,boost 创建了成员的另一个副本,并且原始传入的变量保持不变。

当我更改对指针的引用时,一切正常。

我的问题是:

是否有可能获得工作引用,或者至少在尝试使用引用参数时给出编译错误?

4

2 回答 2

38

bind的boost 文档建议您可以为此使用 boost::ref 和 boost::cref。

于 2009-01-22T17:22:36.533 回答
7

每当绑定中使用的方法被声明为采用引用参数时,我遇到了类似的问题,期望通过引用传递绑定参数。然而,这种情况并非如此!无论方法如何声明,您都需要在 boost::ref() 或 boost::cref() 中显式包装绑定参数(即通过引用传递)。

例子:

ClassA myClassAParameter
void Method(ClassA &param);

现在,以下绑定:

callback = boost::bind(&Method, myClassAParameter);

实际上会复制 ClassA 对象(我知道这是一个临时分配,并且被调用的方法不应该保留对它的引用,因为这不是实际对象的引用,而是对象的副本)。

但是,以下绑定:

callback = boost::bind(&Method, boost::ref(myClassAParameter));

不会复制,而是使用引用创建绑定对象。

于 2014-01-13T18:18:14.433 回答