Определение типа возвращаемого значения из сигнатуры функции, переданной как параметр шаблона C++

Рейтинг: 0Ответов: 1Опубликовано: 05.06.2023

Как определить тип возвращаемого значения из сигнатуры функции, переданной в параметр шаблона?

template <class T> // T хранит сигнатуру функции.
<???> someMethod(someParameters) { // <???> -- тип возвращаемого значения T
    ...
}

Ответы

▲ 1Принят

Для извлечения возвращаемого значения из сигнатуры функции придется написать свой трейт, который бы не требовал указания аргументов, работая за счет специализации шаблона. Еще таким образом можно извлечь и типы аргументов.

template
<
    typename x_Method
>
class
t_MethodTraits;

template
<
    typename... x_Args
,   typename x_Result
>
class
t_MethodTraits<x_Result (x_Args...)>
{
    public: using
    t_Result = x_Result;
};

template
<
    typename x_Method
>
typename t_MethodTraits<x_Method>::t_Result
someMethod(void) 
{
    return typename t_MethodTraits<x_Method>::t_Result{};
}

int
main()
{
    int * result{someMethod<int * (char, float)>()};
    static_cast<void>(result); // not used
}

online compiler