我正在训练封装一些代码,为此我创建了三个类,分别是Vero,Pionner和Vehicle。前两个类具有成员变量cmd和成员函数getcmd - 在每个类中,这些成员略有不同。然后。我们有类Vehicle,它是Vero和Pionner的子类。 Vehicle构造函数具有参数 which_car ,应该用于选择我们要使用的两个类中的哪一个。
我想要某种函数指针,它可以指向类Vero或类Pionner的getcmd成员函数。怎么可以执行这个任务?
评论:我不是在问如何创建一个成员点。我问我怎么能以某种方式创建一个可以指向Vero对象或Pionner对象的泛型类型。
我正在处理的代码。
标题
#ifndef VEHICLE_H
#define VEHICLE_H
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#include <ransac_project/CarCommand.h>
class Vero{
public:
ransac_project::CarCommand cmd;
Vero();
void getcmd(const double &velocity, const double &steering);
};
class Pionner{
public:
geometry_msgs::Twist cmd;
Pionner();
void getcmd(const double &linear_vel, const double &angular_vel);
};
class Vehicle: public Vero, public Pionner{
public:
Vehicle(const std::string &which_car);
void (*arrangemessage) (const double &, const double &);
};
#endif /* VEHICLE_H */
来源
#include "vehicle.hpp"
Vero::Vero(){
cmd.speedLeft = 0.0; cmd.speedRight = 0.0; cmd.steerAngle = 0.0;
return;
}
void Vero::getcmd(const double &velocity, const double &steering){
cmd.speedLeft = velocity;
cmd.speedRight = velocity;
cmd.steerAngle = steering;
return;
}
Pionner::Pionner(){
cmd.linear.x = 0.0; cmd.linear.y = 0.0; cmd.linear.z = 0.0;
cmd.angular.x = 0.0; cmd.angular.y = 0.0; cmd.angular.z = 0.0;
return;
}
void Pionner::getcmd(const double &linear_vel, const double &angular_vel){
cmd.linear.x = linear_vel;
cmd.linear.y = 0;
cmd.linear.z = 0;
cmd.angular.x = 0;
cmd.angular.y = 0;
cmd.angular.z = angular_vel;
return;
}
Vehicle::Vehicle(const std::string &which_car){
if(which_car.compare("vero")==0){
arrangemessage = &Vero::getcmd;
}
else if(which_car.compare("pionner")==0){
arrangemessage = &pionner.getcmd;
}
else{
ROS_INFO_STREAM("which_car must be vero or pionner");
exit(0);
}
}