Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.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
Boost:如何在C++中绑定传递参数?_C++_Boost Bind - Fatal编程技术网

Boost:如何在C++中绑定传递参数?

Boost:如何在C++中绑定传递参数?,c++,boost-bind,C++,Boost Bind,我无法理解这些代码行的某些部分: 绑定和检查可行性,这个,世界,1,2,3 如果robot_state_->setFromIKarg1、arg2、arg3、arg4、arg5、fn_ 第一行的目的是什么?什么时候以及如何确定并传递CheckProbability的参数 下面是checkProbability函数的外观,我省略了参数的数据类型: 布尔检查可行性*世界、*州、*grp、*值 谢谢boost::bind为您提供了一个函数,该函数将其参数映射为调用另一个函数,然后可以选择添加一些它已经知

我无法理解这些代码行的某些部分:

绑定和检查可行性,这个,世界,1,2,3

如果robot_state_->setFromIKarg1、arg2、arg3、arg4、arg5、fn_

第一行的目的是什么?什么时候以及如何确定并传递CheckProbability的参数

下面是checkProbability函数的外观,我省略了参数的数据类型:

布尔检查可行性*世界、*州、*grp、*值

谢谢

boost::bind为您提供了一个函数,该函数将其参数映射为调用另一个函数,然后可以选择添加一些它已经知道的参数。它现在是标准的一部分,因此您可以在上阅读更多内容。

boost::bind,或者现在的std::bind,用于将一些参数绑定到函数。结果是一个接受较少参数并返回相同内容的函数

示例中的代码行基本上相当于:

const auto fn_ = [this, &world](auto&& arg1, auto&& arg2, auto&& arg3) {
  return checkFeasibility(&world, arg1, arg2, arg3);
};
要绑定的参数是要调用的函数,后跟该函数的所有参数。您可以将它们设置为固定值,或者使用占位符_1、_2等暂时将它们忽略,并在调用结果函数时传递它们。因此,结果函数所需的参数数量与您使用的占位符数量完全相同。您还可以以不同的顺序指定它们,以重新排列参数

对于成员函数,它们隐式的第一个参数是this指针,因此这里要绑定的第二个参数是调用函数的对象

在您的示例中,传递给setFromIK的回调函数应该包含三个参数,但作者只有一个更通用的函数,它包含五个参数,而this world是额外的参数。因此,他们在这个普通函数的基础上构造了一个更具体的函数,其中两个参数是固定的。这叫做咖喱


<>注意,如果可能的话,C++核心指南建议使用LAMBDAS来绑定。它通常更可读,甚至更快,因为编译器更容易优化,例如通过内联调用的函数。但这取决于具体的代码和编译器。

让我帮你搜索一下:谢谢!那么,*state、*grp和*value的值是在什么时候确定的呢?我没有看到它们在代码中的任何地方被创建或分配,它们被用于函数中。谢谢。@ bBaLaRe2222在FNI调用的地方通过,所以寻找FNY…,……@ BBaLeRel22:对于现代C++ C++ 11和以后,我的建议是使用LAMBDAS和/或LAMBDAS,而不是BIDEN。SETROFMIK采用一个参数const GATPSTATEVIDIDITY CALBACFFN和约束,在FNZ中作为参数传递。约束实际上在这个文件中的3个位置被调用,例如在setFromIKSubgroups中。挑剔:从bind返回的函数可以在任何数量的参数>3的情况下被调用,因此它更等同于[this,&world]auto&&arg1、auto&&arg2、auto&&arg3、auto…{return CheckObability&world、arg1、arg2、arg3;}