Определение типа возвращаемого значения из сигнатуры функции, переданной как параметр шаблона C++
Как определить тип возвращаемого значения из сигнатуры функции, переданной в параметр шаблона?
template <class T> // T хранит сигнатуру функции.
<???> someMethod(someParameters) { // <???> -- тип возвращаемого значения T
...
}
Ответы (1 шт):
Автор решения: user7860670
→ Ссылка
Для извлечения возвращаемого значения из сигнатуры функции придется написать свой трейт, который бы не требовал указания аргументов, работая за счет специализации шаблона. Еще таким образом можно извлечь и типы аргументов.
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
}