37 #include <pcl/pcl_config.h>
47 #include <pcl/io/boost.h>
48 #include <pcl/exceptions.h>
61 virtual inline ~
Grabber () noexcept;
67 template<
typename T> boost::signals2::connection
68 registerCallback (
const std::function<T>& callback);
74 template<
typename T,
template<
typename>
class FunctionT>
76 boost::signals2::connection
79 return registerCallback (std::function<T> (callback));
85 template<
typename T>
bool
86 providesCallback ()
const;
111 getName ()
const = 0;
117 isRunning ()
const = 0;
121 getFramesPerSecond ()
const = 0;
128 template<
typename T> boost::signals2::signal<T>*
129 find_signal ()
const;
131 template<
typename T>
int
134 template<
typename T>
void
135 disconnect_all_slots ();
137 template<
typename T>
void
140 template<
typename T>
void
149 template<
typename T> boost::signals2::signal<T>*
152 std::map<std::string, boost::signals2::signal_base*>
signals_;
153 std::map<std::string, std::vector<boost::signals2::connection> >
connections_;
160 delete signal.second;
176 template<
typename T> boost::signals2::signal<T>*
179 using Signal = boost::signals2::signal<T>;
181 std::map<std::string, boost::signals2::signal_base*>::const_iterator signal_it =
signals_.find (
typeid (T).name ());
183 return (dynamic_cast<Signal*> (signal_it->second));
188 template<
typename T>
void
191 using Signal = boost::signals2::signal<T>;
195 Signal* signal = dynamic_cast<Signal*> (
signals_[
typeid (T).name ()]);
196 signal->disconnect_all_slots ();
200 template<
typename T>
void
208 template<
typename T>
void
213 connection.unblock ();
229 connection.unblock ();
232 template<
typename T>
int
235 using Signal = boost::signals2::signal<T>;
238 std::map<std::string, boost::signals2::signal_base*>::const_iterator signal_it =
signals_.find (
typeid (T).name ());
241 Signal* signal = dynamic_cast<Signal*> (signal_it->second);
242 return (static_cast<int> (signal->num_slots ()));
247 template<
typename T> boost::signals2::signal<T>*
250 using Signal = boost::signals2::signal<T>;
254 Signal* signal =
new Signal ();
255 signals_[
typeid (T).name ()] = signal;
261 template<
typename T> boost::signals2::connection
264 using Signal = boost::signals2::signal<T>;
267 std::stringstream sstream;
269 sstream <<
"no callback for type:" <<
typeid (T).name ();
274 Signal* signal = dynamic_cast<Signal*> (
signals_[
typeid (T).name ()]);
275 boost::signals2::connection ret = signal->connect (callback);
283 template<
typename T>
bool