一个名为的函数test
作为std::function<>
其参数。
template<typename R, typename ...A>
void test(std::function<R(A...)> f)
{
// ...
}
但是,如果我执行以下操作:
void foo(int n) { /* ... */ }
// ...
test(foo);
编译器(gcc 4.6.1)说no matching function for call to test(void (&)(int))
。
为了使最后一行test(foo)
编译并正常工作,我该如何修改test()
函数?在test()
功能上,我需要f
使用std::function<>
.
我的意思是,是否有任何模板技巧可以让编译器确定函数的签名(foo
例如),并将其std::function<void(int)>
自动转换为?
编辑
我也想为 lambdas(有状态的和无状态的)做这项工作。