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

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

  •  31
  • Brian R. Bondy  · 技术社区  · 17 年前

    我注意到,在传递引用参数以增强绑定时,这些参数的行为与引用不同。相反,boost会创建成员的另一个副本,原始传入变量保持不变。

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

    我的问题是:

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

    2 回复  |  直到 17 年前
        1
  •  35
  •   danio Kouga    14 年前

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

        2
  •  6
  •   DolphinDream    12 年前

    我遇到了类似的问题,希望每当绑定中使用的方法被声明为接受引用参数时,绑定参数都会通过引用传递。然而,事实并非如此!你需要显式地将bind参数(通过引用传递)包装在boost::ref()或boost::cref()中,而不管该方法是如何声明的。

    例子:

    ClassA myClassAParameter
    void Method(ClassA &param);
    

    现在,进行以下绑定:

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

    保留对它的引用,因为这不是对实际对象的引用,而是对对象副本的引用)。

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

    复制一份,但使用 参考