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

时间:2009-01-22 17:19:34

标签: c++ boost-bind

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

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

我的问题是:

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

2 个答案:

答案 0 :(得分:36)

boost documentation for bind建议您可以使用boost :: ref和boost :: cref。

答案 1 :(得分:7)

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

示例:

ClassA myClassAParameter
void Method(ClassA &param);

现在,以下绑定:

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

实际上会生成ClassA对象的COPY(我理解它是一个临时分配,被调用的方法应该保持对它的引用,因为这不是实际对象的引用但是到对象的副本)。

但是,以下绑定:

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

制作副本,但使用引用来创建绑定对象。