是否可以将构造函数发送到 ros 节点订阅中?
Is it possible to send a constructor into ros node subscribe?
我正在尝试将 class 构造函数传递给 ros 订阅函数。是否可以在发布主题时调用构造函数?
class udpMsg
{
public:
std::string udp;
size_t posOfDelim;
std::string token;
udpMsg(){};
udpMsg(const std_msgs::String::ConstPtr& msg)
{
udp = std::string(msg->data);
posOfDelim = udp.find(delimiter);
token = udp.substr(0, posOfDelim);
}
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listener");
ros::NodeHandle n;
A_pub = n.advertise<udpubsub::msgA>("Amsg", 1000);
B_pub = n.advertise<udpubsub::msgB>("Bmsg", 1000);
udpMsg mainMsg;
ros::Subscriber sub = n.subscribe("chatter", 1000,mainMsg.udpMsg)
ros::spin();
不,您不能将构造函数作为函数传递。 udpMsg
是 class 本身的名称,而不是函数的名称。
您可以单独编写一个创建对象的 "factory function",然后将 that 传递给 subscribe
,例如
udpMsg create_message()
{ return udpMsg(); }
我正在尝试将 class 构造函数传递给 ros 订阅函数。是否可以在发布主题时调用构造函数?
class udpMsg
{
public:
std::string udp;
size_t posOfDelim;
std::string token;
udpMsg(){};
udpMsg(const std_msgs::String::ConstPtr& msg)
{
udp = std::string(msg->data);
posOfDelim = udp.find(delimiter);
token = udp.substr(0, posOfDelim);
}
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listener");
ros::NodeHandle n;
A_pub = n.advertise<udpubsub::msgA>("Amsg", 1000);
B_pub = n.advertise<udpubsub::msgB>("Bmsg", 1000);
udpMsg mainMsg;
ros::Subscriber sub = n.subscribe("chatter", 1000,mainMsg.udpMsg)
ros::spin();
不,您不能将构造函数作为函数传递。 udpMsg
是 class 本身的名称,而不是函数的名称。
您可以单独编写一个创建对象的 "factory function",然后将 that 传递给 subscribe
,例如
udpMsg create_message()
{ return udpMsg(); }