37 #include <pcl/pcl_config.h>
47 #include <pcl/io/boost.h>
48 #include <pcl/exceptions.h>
65 virtual inline ~
Grabber () throw ();
71 template<typename T>
boost::signals2::connection
72 registerCallback (const std::function<T>& callback);
78 template<typename T, template<typename> class FunctionT>
79 [[deprecated ("please assign the callback to a std::function.")]]
80 boost::signals2::connection
81 registerCallback (const FunctionT<T>& callback)
83 return registerCallback (std::function<T> (callback));
89 template<
typename T>
bool
90 providesCallback ()
const;
108 getName ()
const = 0;
114 isRunning ()
const = 0;
118 getFramesPerSecond ()
const = 0;
125 template<
typename T> boost::signals2::signal<T>*
126 find_signal ()
const;
128 template<
typename T>
int
131 template<
typename T>
void
132 disconnect_all_slots ();
134 template<
typename T>
void
137 template<
typename T>
void
146 template<
typename T> boost::signals2::signal<T>*
149 std::map<std::string, boost::signals2::signal_base*>
signals_;
150 std::map<std::string, std::vector<boost::signals2::connection> >
connections_;
157 delete signal.second;
160 template<
typename T> boost::signals2::signal<T>*
163 using Signal = boost::signals2::signal<T>;
165 std::map<std::string, boost::signals2::signal_base*>::const_iterator signal_it =
signals_.find (
typeid (T).name ());
167 return (
dynamic_cast<Signal*
> (signal_it->second));
172 template<
typename T>
void
175 using Signal = boost::signals2::signal<T>;
179 Signal* signal =
dynamic_cast<Signal*
> (
signals_[
typeid (T).name ()]);
180 signal->disconnect_all_slots ();
184 template<
typename T>
void
192 template<
typename T>
void
197 connection.unblock ();
213 connection.unblock ();
216 template<
typename T>
int
219 using Signal = boost::signals2::signal<T>;
222 std::map<std::string, boost::signals2::signal_base*>::const_iterator signal_it =
signals_.find (
typeid (T).name ());
225 Signal* signal =
dynamic_cast<Signal*
> (signal_it->second);
226 return (
static_cast<int> (signal->num_slots ()));
231 template<
typename T> boost::signals2::signal<T>*
234 using Signal = boost::signals2::signal<T>;
238 Signal* signal =
new Signal ();
239 signals_[
typeid (T).name ()] = signal;
245 template<
typename T> boost::signals2::connection
248 using Signal = boost::signals2::signal<T>;
251 std::stringstream sstream;
253 sstream <<
"no callback for type:" <<
typeid (T).name ();
258 Signal* signal =
dynamic_cast<Signal*
> (
signals_[
typeid (T).name ()]);
259 boost::signals2::connection ret = signal->connect (callback);
267 template<
typename T>
bool