给定一个非常简单但冗长的函数,例如:
int foo(int a, int b, int c, int d) {
return 1;
}
// using ReturnTypeOfFoo = ???
在编译时确定函数的返回类型(ReturnTypeOfFoo
,在本例中为:int
)最简单简洁的方法是什么不重复函数的参数类型(仅按名称,因为已知该函数没有任何额外的重载)?
最佳答案
您可以利用 std::function
这里将为您提供函数返回类型的别名。这确实需要 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++ - 确定函数返回类型的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53673442/