Функция с именем 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) сообщает , что нет соответствующей функции для вызова test (void (&) (int))
.
Чтобы последняя строка test (foo)
компилировалась и работала правильно, как я могу изменить функцию test ()
? В функции test ()
мне нужно f
с типом std :: function <>.
Я имею в виду, есть ли какие-нибудь уловки с шаблоном, позволяющие компилятору определять сигнатуру функции ( foo
в примере) и преобразовывать ее в std :: function
автоматически?
Я хочу, чтобы это работало и для лямбда-выражений (как заявленных, так и не имеющих состояния).