Typesafe signal framework for C++