c++ क्या एक लैम्ब्डा के हस्ताक्षर को एमप्लस अनुक्रम के रूप में निकालना है?




lambda c++11 (2)

उदाहरण के लिए, boost::mpl::vector रूप में सी ++ 0x लैम्ब्डा के हस्ताक्षर, परिणाम- और पैरामीटर प्रकारों का पता लगाने का एक तरीका है? उदाहरण के लिए, लैम्ब्डा के लिए

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

मुझे boost::mpl::vector<void,float,int>



सी ++ 0x लैम्ब्डास जो "क्लोजर ऑब्जेक्ट्स" हैं, वे हैं फ़ैंटर्स। तो आप boost.Boost.FunctionTypes उपयोग कर सकते हैं इसके operator() विघटन operator()

उदाहरण:

#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, "");
}




boost-mpl