boost :: bind与具有引用参数的函数

Bri*_*ndy 29 c++ boost-bind

我注意到,当传递引用参数来提升绑定时,这些参数不会像引用一样.相反,boost会创建该成员的另一个副本,并且传入的原始变量保持不变.

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

我的问题是:

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

Tim*_*sch 36

bindboost文档表明你可以使用boost :: ref和boost :: cref.


Dol*_*eam 7

我遇到了类似的问题,希望只要声明bind中使用的方法获取引用参数,就可以通过引用传递绑定参数.然而,这种情况并非如此!无论方法如何声明,您都需要在boost :: ref()或boost :: cref()中显式地包装bind参数(即通过引用传递).

例:

ClassA myClassAParameter
void Method(ClassA &param);
Run Code Online (Sandbox Code Playgroud)

现在,以下绑定:

callback = boost::bind(&Method, myClassAParameter);
Run Code Online (Sandbox Code Playgroud)

实际上使ClassA的对象的副本(我明白这是一个临时的分配和调用的方法应该不是一个参考保持它,因为这是不实际对象的引用,但该对象的副本).

但是,以下绑定:

callback = boost::bind(&Method, boost::ref(myClassAParameter));
Run Code Online (Sandbox Code Playgroud)

进行复印,但使用一个参考来创建绑定对象.