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