tutorial sintaxis funciones expresiones español ejemplos anonimas c++ lambda c++11 metaprogramming boost-mpl

c++ - sintaxis - lambda c# tutorial



¿Hay alguna forma de deducir la firma de un lambda como una secuencia mpl? (2)

¿Hay alguna forma de deducir los tipos de firma, resultado y parámetro de un c ++ 0x lambda como una secuencia Boost.MPL, por ejemplo un boost::mpl::vector ? Por ejemplo, para una lambda

[]( float a, int b ) -> void { std::cout << a << b << std::endl; }

Me gustaría obtener un boost::mpl::vector<void,float,int> .


C ++ 0x lambdas que son "objetos de cierre" son funtores. Entonces puedes usar boost.Boost.FunctionTypes para descomponer su operator() .

Ejemplo:

#include <boost/function_types/parameter_types.hpp> #include <boost/mpl/at.hpp> #include <boost/mpl/int.hpp> int main() { int x = 1; auto f = [x](char a, short b, int c){ return x; }; typedef decltype(f) lambda_t; typedef boost::function_types::parameter_types< decltype(&lambda_t::operator())>::type args_t; // we can use boost::mpl::identity<decltype(f)>::type instead of lambda_t static_assert(sizeof(boost::mpl::at<args_t, boost::mpl::int_<1>>::type) == 1, ""); }