C++11 variadic std::paramètre de la fonction

Une fonction nommée test prend std::function<> comme paramètre.

template<typename R, typename ...A>
void test(std::function<R(A...)> f)
{
    //...
}

Mais, si je ne les suivants:

void foo(int n) { /* ... */ }

//...

test(foo);

Compilateur(gcc 4.6.1) dit no matching function for call to test(void (&)(int)).

De faire la dernière ligne test(foo) compile et fonctionne correctement, comment puis-je modifier le test() fonction? Dans test() fonction, j'ai besoin de f avec le type de std::function<>.

Je veux dire, est-il un modèle astuces pour laisser le compilateur de déterminer la signature de la fonction(foo dans l'exemple) et de le convertir en std::function<void(int)> automatiquement?

MODIFIER

Je veux faire ce travail pour les lambdas(à la fois affirmé et apatrides) ainsi.

InformationsquelleAutor Daniel K. | 2012-02-11