C++类对象通过函数指针访问其成员函数的高级应用

应用源自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方式访问了其成员函数。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章