代码之家  ›  专栏  ›  技术社区  ›  Brian R. Bondy

boost::与具有引用参数的函数绑定

  •  28
  • Brian R. Bondy  · 技术社区  · 16 年前

    我注意到,当将引用参数传递给BoostBind时,这些参数的作用不会像引用一样。相反,boost会创建成员的另一个副本,而传入的原始变量保持不变。

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

    我的问题是:

    是否可以获取对工作的引用,或者在尝试使用引用参数时至少给出编译错误?

    2 回复  |  直到 11 年前
        1
  •  35
  •   danio Kouga    13 年前

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

        2
  •  6
  •   DolphinDream    11 年前

    我遇到了类似的问题,每当在绑定中使用的方法声明为采用引用参数时,都期望通过引用传递一个绑定参数。但事实并非如此!无论方法如何声明,您都需要将绑定参数(将通过引用传递)显式包装在boost::ref()或boost::cref()中。

    例子:

    ClassA myClassAParameter
    void Method(ClassA &param);
    

    现在,以下绑定:

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

    将实际生成ClassA对象的副本(我理解这是一个临时分配,调用的方法应该 保留对它的引用,因为这不是实际对象的引用,而是对象的副本)。

    但是,以下绑定:

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

    复制,但使用 参考 创建绑定对象。