Providing arguments to subscriber callback function
Hello,
I am trying to register same callback for different topics.What I am trying to do is distinguishing the message origin.
I am trying to provide argument to callback function to achieve this.I am using boost::bind.
Here is the signature of my callback function:
void CommandDone_received(const uav::Done &msg, std::string uav_name)
Here is the code that I use to instantiate the subscriber:
std::string uav_name = uav.get_name();
ros::Subscriber subscriber = nh.subscribe<uav::done>(uav.get_name() + "/CommandDone", 1000, boost::bind(&CommandDone_received, _1, uav_name));
This is the error that I got when I run "catkin_make"
In file included from /usr/include/boost/bind.hpp:22:0, from /opt/ros/indigo/include/ros/publisher.h:35, from /opt/ros/indigo/include/ros/node_handle.h:32, from /opt/ros/indigo/include/ros/ros.h:45, from /home/baskin/KOVAN/src/uav/uav_src/uav_master.cpp:1: /usr/include/boost/bind/bind.hpp: In instantiation of ‘void boost::_bi::list2<a1, a2="">::operator()(boost::_bi::type<void>, F&, A&, int) [with F = void (*)(const uav::Done_<std::allocator<void> >&, std::basic_string<char>); A = boost::_bi::list1<const boost::shared_ptr<const="" uav::done_<std::allocator<void=""> > >&>; A1 = boost::arg<1>; A2 = boost::_bi::value<std::basic_string<char> >]’: /usr/include/boost/bind/bind_template.hpp:47:59: required from ‘boost::_bi::bind_t<r, f,="" l="">::result_type boost::_bi::bind_t<r, f,="" l="">::operator()(const A1&) [with A1 = boost::shared_ptr<const uav::done_<std::allocator<void=""> > >; R = void; F = void (*)(const uav::Done_<std::allocator<void> >&, std::basic_string<char>); L = boost::_bi::list2<boost::arg<1>, boost::_bi::value<std::basic_string<char> > >; boost::_bi::bind_t<r, f,="" l="">::result_type = void]’ /usr/include/boost/function/function_template.hpp:153:11: required from ‘static void boost::detail::function::void_function_obj_invoker1<functionobj, r,="" t0="">::invoke(boost::detail::function::function_buffer&, T0) [with FunctionObj = boost::_bi::bind_t<void, void="" (*)(const="" uav::done_<std::allocator<void=""> >&, std::basic_string<char>), boost::_bi::list2<boost::arg<1>, boost::_bi::value<std::basic_string<char> > > >; R = void; T0 = const boost::shared_ptr<const uav::done_<std::allocator<void=""> > >&]’ /usr/include/boost/function/function_template.hpp:934:38: required from ‘void boost::function1<r, t1="">::assign_to(Functor) [with Functor = boost::_bi::bind_t<void, void="" (*)(const="" uav::done_<std::allocator<void=""> >&, std::basic_string<char>), boost::_bi::list2<boost::arg<1>, boost::_bi::value<std::basic_string<char> > > >; R = void; T0 = const boost::shared_ptr<const uav::done_<std::allocator<void=""> > >&]’ /usr/include/boost/function/function_template.hpp:722:7: required from ‘boost::function1<r, t1="">::function1(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<functor>::value>::value, int>::type) [with Functor = boost::_bi::bind_t<void, void="" (*)(const="" uav::done_<std::allocator<void=""> >&, std::basic_string<char>), boost::_bi::list2<boost::arg<1>, boost::_bi::value<std::basic_string<char> > > >; R = void; T0 = const boost::shared_ptr<const uav::done_<std::allocator<void=""> > >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<functor>::value>::value, int>::type = int]’ /usr/include/boost/function/function_template.hpp:1069:16: required from ‘boost::function<r(t0)>::function(Functor, typename boost::enable_if_c ...