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