2017-10-15 12 views
1

J'essaye de passer un constructeur de classe dans la fonction d'abonnement de ros. Est-il possible d'avoir le constructeur appelé quand le sujet est publié?Est-il possible d'envoyer un constructeur dans un nœud ros abonné?

 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(); 
+0

Quels sont les types des arguments à inscrire? Je soupçonne qu'il cherche une fonction de rappel. Et je suppose que ce n'est pas une fonction membre mais plutôt une fonction membre libre ou statique. –

Répondre

0

Non, vous ne pouvez pas passer un constructeur en tant que fonction. udpMsg est le nom de la classe elle-même, pas le nom d'une fonction.

Vous pouvez écrire une « fonction d'usine » séparée qui crée des objets et passer que-subscribe, comme

udpMsg create_message() 
{ return udpMsg(); }