Arity eines generischen Lambda
s ist möglich, die Arität eines nicht-generischen Lambda zu bestimmen, indem auf dessen @ zugegriffen wiroperator()
.
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); };
Das ist schön und gut für so etwas wie[](int x){ return x; }
als dieoperator()
wird nicht als Vorlage verwendet.
Allerdings tun generische Lambdas die Vorlageoperator()
und es ist nur möglich, auf eine konkrete Instanziierung der Vorlage zuzugreifen - was etwas problematisch ist, da ich keine Vorlagenargumente für das @ manuell bereitstellen kaoperator()
Da ich nicht weiß, was seine Arität ist.
Also natürlich so etwas wie
auto lambda = [](auto x){ return x; };
auto arity = fInfo<decltype(lambda)>::arity;
funktioniert nicht.
Ich weiß nicht, wohin ich casten soll, und ich weiß nicht, welche Vorlagenargumente ich bereitstellen soll (oder wie viele) operator()<??>
).
Irgendwelche Ideen, wie das geht?