works with functions of multiple arguments
templates to bind multiple function arguments in a lambda