// Versions of advertise() ////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * \brief Advertise a topic, simple version * * This call connects to the master to publicize that the node will be * publishing messages on the given topic. This method returns a Publisher that allows you to * publish a message on this topic. * * This version of advertise is a templated convenience function, and can be used like so * * ros::Publisher pub = handle.advertise<std_msgs::Empty>("my_topic", 1); * * \param topic Topic to advertise on * * \param queue_size Maximum number of outgoing messages to be * queued for delivery to subscribers * * \param latch (optional) If true, the last message published on * this topic will be saved and sent to new subscribers when they * connect * * \return On success, a Publisher that, when it goes out of scope, * will automatically release a reference on this advertisement. On * failure, an empty Publisher. * * \throws InvalidNameException If the topic name begins with a * tilde, or is an otherwise invalid graph resource name, or is an * otherwise invalid graph resource name */ template <class M> Publisher advertise(const std::string& topic, uint32_t queue_size, bool latch = false) { AdvertiseOptions ops; ops.template init<M>(topic, queue_size); ops.latch = latch; return advertise(ops); } /** * \brief Advertise a topic, with most of the available options, including subscriber status callbacks * * This call connects to the master to publicize that the node will be * publishing messages on the given topic. This method returns a Publisher that allows you to * publish a message on this topic. * * This version of advertise allows you to pass functions to be called when new subscribers connect and * disconnect. With bare functions it can be used like so: \verbatim void connectCallback(const ros::SingleSubscriberPublisher& pub) { // Do something } handle.advertise<std_msgs::Empty>("my_topic", 1, (ros::SubscriberStatusCallback)connectCallback); \endverbatim * * With class member functions it can be used with boost::bind: \verbatim void MyClass::connectCallback(const ros::SingleSubscriberPublisher& pub) { // Do something } MyClass my_class; ros::Publisher pub = handle.advertise<std_msgs::Empty>("my_topic", 1, boost::bind(&MyClass::connectCallback, my_class, _1)); \endverbatim * * * \param topic Topic to advertise on * * \param queue_size Maximum number of outgoing messages to be queued for delivery to subscribers * * \param connect_cb Function to call when a subscriber connects * * \param disconnect_cb (optional) Function to call when a subscriber disconnects * * \param tracked_object (optional) A shared pointer to an object to track for these callbacks. If set, the a weak_ptr will be created to this object, * and if the reference count goes to 0 the subscriber callbacks will not get called. * Note that setting this will cause a new reference to be added to the object before the * callback, and for it to go out of scope (and potentially be deleted) in the code path (and therefore * thread) that the callback is invoked from. * \param latch (optional) If true, the last message published on this topic will be saved and sent to new subscribers when they connect * \return On success, a Publisher that, when it goes out of scope, will automatically release a reference * on this advertisement. On failure, an empty Publisher which can be checked with: \verbatim ros::NodeHandle nodeHandle; ros::publisher pub = nodeHandle.advertise<std_msgs::Empty>("my_topic", 1, (ros::SubscriberStatusCallback)callback); if (pub) // Enter if publisher is valid { ... } \endverbatim * \throws InvalidNameException If the topic name begins with a tilde, or is an otherwise invalid graph resource name */ template <class M> Publisher advertise(const std::string& topic, uint32_t queue_size, const SubscriberStatusCallback& connect_cb, const SubscriberStatusCallback& disconnect_cb = SubscriberStatusCallback(), const VoidConstPtr& tracked_object = VoidConstPtr(), bool latch = false) { AdvertiseOptions ops; ops.template init<M>(topic, queue_size, connect_cb, disconnect_cb); ops.tracked_object = tracked_object; ops.latch = latch; return advertise(ops); } /** * \brief Advertise a topic, with full range of AdvertiseOptions * * This call connects to the master to publicize that the node will be * publishing messages on the given topic. This method returns a Publisher that allows you to * publish a message on this topic. * * This is an advanced version advertise() that exposes all options (through the AdvertiseOptions structure) * * \param ops Advertise options to use * \return On success, a Publisher that, when it goes out of scope, will automatically release a reference * on this advertisement. On failure, an empty Publisher which can be checked with: \verbatim ros::NodeHandle nodeHandle; ros::AdvertiseOptions ops; ... ros::publisher pub = nodeHandle.advertise(ops); if (pub) // Enter if publisher is valid { ... } \endverbatim * * \throws InvalidNameException If the topic name begins with a tilde, or is an otherwise invalid graph resource name */ Publisher advertise(AdvertiseOptions& ops);
这些都是在node.h里面的 真他妈恶心 ,我之前怎么就不知道呢