應用源自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方式訪問了其成員函數。