Protocol with generic functions call. use boost::any