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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值