Estoy tratando de trabajar con lambda en C++ después de haberlos usado mucho en C#. Actualmente tengo una tupla boost (esta es la versión realmente simplificada).cómo guardar en caché un lambda en C++ 0x?
typedef shared_ptr<Foo> (*StringFooCreator)(std::string, int, bool)
typedef tuple<StringFooCreator> FooTuple
A continuación, cargo una función en el espacio de nombre global en mi FooTuple. Idealmente, me gustaría reemplazar esto con un lambda.
tuplearray[i] = FooTuple([](string bar, int rc, bool eom) -> {return shared_ptr<Foo>(new Foo(bar, rc, eom));});
No puedo entender cuál debe ser la firma de la función para la tupla lambda. Obviamente no es un puntero a la función, pero no puedo entender cuál debería ser la firma de una lambda. Los recursos para lambda son todos bastante delgados en este momento. Me doy cuenta de que C++ 0x está cambiando en este momento, pero tenía curiosidad sobre cómo hacer que esto funcione. También me doy cuenta de que hay formas más simples de hacer esto, pero estoy jugando con C++ 0x. Estoy usando el compilador Intel 11.1.
No funciona - una expresión lambda no es un puntero a la función. Es (conceptualmente) una clase de functor anónima. –
de las cosas que he leído, el compilador debería poder resolverlo y me avisará si no puede. Lo echaré un vistazo. Gracias. – Steve
@Terry hmm eso es extraño, porque este código se compila y se ejecuta en GCC en este momento. – joshperry