推导出独立函数的返回类型

vso*_*tco 0 c++ templates c++11

我试图找出非成员函数的返回类型.我首先想到的是std::result_of这项工作,但看起来后者只适用于可调用的对象.特别是,std::result_of<decltype(f)>::type 不工作.我终于设法提出了一些有效的代码

#include <iostream>
#include <typeinfo>

void f(int); // we deduce the returning type of this function

template<typename Ret, typename... Args>
struct Helper
{
    using type = Ret;
};

template<typename Ret, typename... Args>
Helper<Ret, Args...> invoke(Ret(*fp)(Args...))
{
    return {};
}

template<typename Ret, typename... Args>
using Return_Type = typename Helper<Ret, Args...>::type;

int main()
{
    std::cout << typeid(decltype(invoke(f))::type).name() << std::endl; // fine
}
Run Code Online (Sandbox Code Playgroud)

我在这里使用了一个附加函数,模板invoke,它接受一个指向我想推断返回类型的函数的指针,并返回一个"帮助器"结构,我从中读取实际的返回类型.

代码似乎有点复杂,因为它涉及一个调用函数(虽然没有执行实际的评估).这样做还有其他更简单,更清晰/更短的方法吗?

Che*_*Alf 6

咨询我自己的老博客帖子,我发现:

template< class Func >
struct ResultOf
{
    typedef typename std::function<
        typename std::remove_pointer<Func>::type
        >::result_type T;
};
Run Code Online (Sandbox Code Playgroud)