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