Is there a way to deduce the signature of a lambda as an mpl sequence?

后端 未结 1 1276
既然无缘
既然无缘 2020-12-19 09:44

Is there a way to deduce the signature, result- and parameter-types, of a c++0x lambda as a Boost.MPL sequence, for example a boost::mpl::vector? For example, f

相关标签:
1条回答
  • 2020-12-19 10:15

    C++0x lambdas which are "closure-objects" are functors. So you can use boost.Boost.FunctionTypes to decompose its operator().

    Example:

    #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, "");
    }
    
    0 讨论(0)
提交回复
热议问题