我试图找出非成员函数的返回类型.我首先想到的是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,它接受一个指向我想推断返回类型的函数的指针,并返回一个"帮助器"结构,我从中读取实际的返回类型.
代码似乎有点复杂,因为它涉及一个调用函数(虽然没有执行实际的评估).这样做还有其他更简单,更清晰/更短的方法吗?