Sto provando a creare una funzione che può essere chiamata con un lambda che accetta 0, 1 o 2 argomenti. Poiché ho bisogno che il codice funzioni su g ++ 4.5 e vs2010 (che non supporta modelli variadic o conversioni lambda in puntatori di funzioni) l'unica idea che ho trovato è quella di scegliere quale implementazione chiamare in base all'arity. Di seguito è la mia ipotesi non funzionante su come dovrebbe apparire. C'è un modo per risolvere il mio codice o c'è un modo migliore per farlo in generale?C++ 0x: overloading su lambda arity
#include <iostream>
#include <functional>
using namespace std;
template <class Func> struct arity;
template <class Func>
struct arity<Func()>{ static const int val = 0; };
template <class Func, class Arg1>
struct arity<Func(Arg1)>{ static const int val = 1; };
template <class Func, class Arg1, class Arg2>
struct arity<Func(Arg1,Arg2)>{ static const int val = 2; };
template<class F>
void bar(F f)
{
cout << arity<F>::val << endl;
}
int main()
{
bar([]{cout << "test" << endl;});
}
Puoi mostrare un esempio di codice che chiamerebbe la funzione lambda? – Heatsink