#pragma once #include #include #include #include #include #include template struct simple_signal : public pack_args < simple_signal const, typename boost::fusion::result_of::as_vector >::type, void > { typedef boost::function1 function; template struct invoke { invoke(const F& f) : f_(f) {} void operator()(const sequence_type& seq) const { boost::fusion::unpack_args(f_, seq); } F f_; }; template void connect(const F& f) { m_functions.push_back(invoke(f)); } // callback from pack_args. void on_packed_args(const sequence_type& seq) const { for(std::list::const_iterator i = m_functions.begin(); i != m_functions.end(); ++i) { (*i)(seq); } } private: std::list m_functions; };