Обнаружение объекта функции (функтора) и лямбда-признаков

Как я могу определить тип возвращаемого значения и типы параметров нулевых и унарных указателей на функции, объектов std :: function и функторов (включая лямбды)?

Boost function_traits и функциональные черты не совсем выдают меня из коробки, но я готов их дополнить или заменить.

Я мог бы сделать что-то вроде этого:

namespace nsDetail
{
    class Dummy { Dummy(); };
}

template struct FnTraits;

template
struct FnTraits
{
    typedef nsDetail::Dummy ParamType;
    typedef R               ReturnType;
    typedef R Signature();
};

template
struct FnTraits
{
    typedef P ParamType;
    typedef R ReturnType;
    typedef R Signature( P );
};

template
struct FnTraits< std::function >
{
    typedef nsDetail::Dummy ParamType;
    typedef R               ReturnType;
    typedef R Signature();
};

template
struct FnTraits< std::function >
{
    typedef P ParamType;
    typedef R ReturnType;
    typedef R Signature( P );
};

Но как мне специализироваться на функторах / лямбдах?

Обновление: Возможно, что-то вроде этого ответа на другой вопрос , но переведенного из перегрузки в специализацию?

8
задан metal 1 June 2011 в 14:01
поделиться