use boost::signals2