Функция с именем 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)>
?
ИЗМЕНИТЬ
Я хочу сделать эту работу для лямбда (как заявленных, так и без гражданства).