Как я могу определить тип возвращаемого значения и типы параметров нулевых и унарных указателей на функции, объектов 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 );
};
Но как мне специализироваться на функторах / лямбдах?
Обновление: Возможно, что-то вроде этого ответа на другой вопрос , но переведенного из перегрузки в специализацию?