应用源自OMPL库源代码:http://ompl.kavrakilab.org/index.html
以下代码出自:RRTstar.cpp,位于ompl::geometric::RRTstar::RRTstar(const base::SpaceInformationPtr &si)函数中:
Planner::declareParam<double>("range", this, &RRTstar::setRange, &RRTstar::getRange, "0.:1.:10000.");
以下代码出自:Planner.h,class Planner类中:
template <typename T, typename PlannerType, typename SetterType, typename GetterType>
void declareParam(const std::string &name, const PlannerType &planner, const SetterType &setter,
const GetterType &getter, const std::string &rangeSuggestion = "")
{
params_.declareParam<T>(name,
[planner, setter](T param) // lambda函数
{
(*planner.*setter)(param);
},
[planner, getter]
{
return (*planner.*getter)();
});
if (!rangeSuggestion.empty())
params_[name].setRangeSuggestion(rangeSuggestion);
}
其中 (*planner.setter)(param),“planner”对应this类指针,“setter”对应&RRTstar::setRange,是继承类“RRTstar”的成员函数指针,其通过planner.*setter方式访问了其成员函数。