我注意到,当将引用参数传递给 boost 绑定时,这些参数不会像引用一样起作用。相反,boost 创建了成员的另一个副本,并且原始传入的变量保持不变。
当我更改对指针的引用时,一切正常。
我的问题是:
是否有可能获得工作引用,或者至少在尝试使用引用参数时给出编译错误?
我注意到,当将引用参数传递给 boost 绑定时,这些参数不会像引用一样起作用。相反,boost 创建了成员的另一个副本,并且原始传入的变量保持不变。
当我更改对指针的引用时,一切正常。
我的问题是:
是否有可能获得工作引用,或者至少在尝试使用引用参数时给出编译错误?
bind的boost 文档建议您可以为此使用 boost::ref 和 boost::cref。
每当绑定中使用的方法被声明为采用引用参数时,我遇到了类似的问题,期望通过引用传递绑定参数。然而,这种情况并非如此!无论方法如何声明,您都需要在 boost::ref() 或 boost::cref() 中显式包装绑定参数(即通过引用传递)。
例子:
ClassA myClassAParameter
void Method(ClassA ¶m);
现在,以下绑定:
callback = boost::bind(&Method, myClassAParameter);
实际上会复制 ClassA 对象(我知道这是一个临时分配,并且被调用的方法不应该保留对它的引用,因为这不是实际对象的引用,而是对象的副本)。
但是,以下绑定:
callback = boost::bind(&Method, boost::ref(myClassAParameter));
不会复制,而是使用引用来创建绑定对象。