lundi 7 octobre 2019

Function pointer argument fails for generic std::function parameter [duplicate]

This question already has an answer here:

I can pass a lambda or a function pointer to a parameter expecting a specific std::function instantiation as shown:

#include <functional>

void foo1(std::function<void()> f) { f(); }
void bar() { }

void test1()
{
  foo1([](){});
  foo1(bar);
}

If instead any of the std::function template parameters are left unspecified, providing either such argument type fails to compile:

template <typename T>    
void foo2(std::function<T()>    f) { f(); }

void test2()
{
  foo2([](){}); // error
  foo2(bar);    // error
}

Can I work with generic std::function parameters in such a scenario? Or should I switch to using function pointer parameters? I won't always know the types or arity of the arguments in advance, but the lambdas will always be captureless.

Aucun commentaire:

Enregistrer un commentaire