A function named test
takes std::function<>
as its parameter.
template<typename R, typename ...A>
void test(std::function<R(A...)> f)
{
// ...
}
But, if I do the following:
void foo(int n) { /* ... */ }
// ...
test(foo);
Compiler(gcc 4.6.1) says no matching function for call to test(void (&)(int))
.
To make the last line test(foo)
compiles and works properly, how can I modify the test()
function? In test()
function, I need f
with type of std::function<>
.
I mean, is there any template tricks to let compiler determine the signature of function(foo
in example), and convert it to std::function<void(int)>
automatically?
EDIT
I want to make this work for lambdas(both stated and stateless) as well.
See Question&Answers more detail:os