2017-10-15 6 views
1

クラスのコンストラクタをros subscribe関数に渡そうとしています。トピックが公開されたときにコンストラクタを呼び出すことは可能ですか?ros node subscribeにコンストラクタを送ることは可能ですか?

 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

のようにサブスクライブする引数の型は何でしょうか?私はそれがコールバック関数を探していると思われる。そして、私はそれがメンバ関数ではなく、むしろフリーまたは静的メンバ関数であると推測しています。 –

答えて

0

いいえ、コンストラクタを関数として渡すことはできません。 udpMsgは、クラス自体の名前であり、関数の名前ではありません。

あなたはオブジェクトを作成する別の「工場出荷時の機能」を書き、subscribeことを渡し、

udpMsg create_message() 
{ return udpMsg(); } 
関連する問題