Estoy tratando de crear una función que se pueda invocar con una lambda que tome 0, 1 o 2 argumentos. Como necesito el código para trabajar tanto en g ++ 4.5 como en vs2010 (que no admite plantillas variadic o conversiones lambda para punteros a funciones), la única idea que he encontrado es elegir qué implementación llamar en función de arity. Lo siguiente es mi conjetura no operativa sobre cómo debería verse esto. ¿Hay alguna manera de arreglar mi código o hay una mejor manera de hacerlo en general?C++ 0x: sobrecarga en 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;});
}
¿Puedes mostrar un ejemplo de código que llamaría a la función lambda? – Heatsink