其他分享
首页 > 其他分享> > c – 确定函数返回类型的最简单方法

c – 确定函数返回类型的最简单方法

作者:互联网

给出一个非常简单但冗长的功能,例如:

int foo(int a, int b, int c, int d) {
    return 1;
}

// using ReturnTypeOfFoo = ???

什么是在编译时确定函数的返回类型(ReturnTypeOfFoo,在此示例中为:int)而不重复函数的参数类型的最简单和简洁的方法(仅通过名称,因为已知该函数没有任何额外的重载)?

解决方法:

您可以在此处使用std::function,它将为函数返回类型提供typedef.这确实需要C 17支持,因为它依赖于class template argument deduction,但它适用于任何可调用类型:

using ReturnTypeOfFoo = decltype(std::function{foo})::result_type;

我们可以使这更像一般

template<typename Callable>
using return_type_of_t = 
    typename decltype(std::function{std::declval<Callable>()})::result_type;

然后让你像使用它一样

int foo(int a, int b, int c, int d) {
    return 1;
}

auto bar = [](){ return 1; };

struct baz_ 
{ 
    double operator()(){ return 0; } 
} baz;

using ReturnTypeOfFoo = return_type_of_t<decltype(foo)>;
using ReturnTypeOfBar = return_type_of_t<decltype(bar)>;
using ReturnTypeOfBaz = return_type_of_t<decltype(baz)>;

标签:c,function,compile-time,c17,return-type
来源: https://codeday.me/bug/20190930/1835078.html