Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::与参数为引用的函数绑定_C++_Boost Bind - Fatal编程技术网

C++ boost::与参数为引用的函数绑定

C++ boost::与参数为引用的函数绑定,c++,boost-bind,C++,Boost Bind,我注意到,当将引用参数传递给boostbind时,这些参数的行为与引用不同。相反,boost会创建该成员的另一个副本,并且传入的原始变量保持不变 当我更改指针的引用时,一切正常 我的问题是: 有没有可能找到工作的参考资料,或者至少在尝试使用引用参数时给出一个编译错误?建议您可以使用boost::ref和boost::cref进行编译。我遇到了类似的问题,希望在绑定中使用的方法声明为引用参数时,通过引用传递绑定参数。然而事实并非如此!无论方法是如何声明的,您都需要在boost::ref()或boo

我注意到,当将引用参数传递给boostbind时,这些参数的行为与引用不同。相反,boost会创建该成员的另一个副本,并且传入的原始变量保持不变

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

我的问题是:


有没有可能找到工作的参考资料,或者至少在尝试使用引用参数时给出一个编译错误?

建议您可以使用boost::ref和boost::cref进行编译。

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

例如:

ClassA myClassAParameter
void Method(ClassA &param);
现在,以下绑定:

callback = boost::bind(&Method, myClassAParameter);
callback = boost::bind(&Method, boost::ref(myClassAParameter));
将实际创建ClassA对象的副本(据我所知,这是一个临时分配,被调用的方法应该而不是保留对它的引用,因为这不是对实际对象的引用,而是对对象副本的引用)

但是,以下约束条件:

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

不制作副本,而是使用引用创建绑定对象

谢谢大家!!我正在使用boost::asio Timer.5来学习。并希望生成传递参数的通用打印。例如,
void increment_int(int&x)
如果在调用
int tmp=0
时意外忘记使用
boost::ref
boost::function func=boost::bind(f,tmp)
-->执行函数时,
tmp
将不会增加。相反,由
boost::bind
创建的对象保存一个副本,并使用该副本调用函数
increment\u int
。有关更多信息,请参阅。我还确保创建一个简短、自包含、可编译的示例来测试/验证我所说的内容。