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

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