Aridade de um lambda genérico
É possível deduzir a aridade de um lambda não genérico acessando suaoperator()
.
template <typename F>
struct fInfo : fInfo<decltype(&F::operator())> { };
template <typename F, typename Ret, typename... Args>
struct fInfo<Ret(F::*)(Args...)const> { static const int arity = sizeof...(Args); };
Isso é legal e elegante para algo como[](int x){ return x; }
Enquanto ooperator()
não tem modelo.
No entanto, lambdas genéricas fazem o modelo dooperator()
e só é possível acessar uma instanciação concreta do modelo - o que é um pouco problemático porque não posso fornecer manualmente argumentos de modelo para o modelooperator()
como eu não sei qual é a sua aridade.
Então, é claro, algo como
auto lambda = [](auto x){ return x; };
auto arity = fInfo<decltype(lambda)>::arity;
não funciona
Não sei no que transmitir nem sei quais argumentos do modelo fornecer (ou quantos) (operator()<??>
)
Alguma idéia de como fazer isso?