相关疑难解决方法(0)

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

我试图找出非成员函数的返回类型.我首先想到的是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,它接受一个指向我想推断返回类型的函数的指针,并返回一个"帮助器"结构,我从中读取实际的返回类型.

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

c++ templates c++11

0
推荐指数
1
解决办法
198
查看次数

标签 统计

c++ ×1

c++11 ×1

templates ×1