如何以这种方式获取函数的返回类型(传递给高阶函数/类):
template <typename F>
auto DoSomething(F&& func) -> /* whatever type func returns */
{
// whatever...
return /* something that is func's type */
}
编辑:尤其是如果func
需要T类型的参数。我的直觉是
decltype
或declval
应该在图片中,但是到目前为止我还没有碰到任何麻烦。更全面的上下文:
struct Poop
{
float x;
int y;
}
Poop Digest(float a)
{
Poop myPoop{ a, 42 };
return myPoop;
}
template <typename F, typename T>
auto DoSomething(F&& func, T number) -> /* should be of type Poop */
{
// whatever... Digest(number)... whatever...
return /* a Poop object */
}
int main()
{
Poop smellyThing;
smellyThing = DoSomething(Digest, 3.4f); // will work
}
最佳答案
确实,您可以像这样使用decltype
:
template <typename F, typename T>
auto DoSomething(F&& func, T number) -> decltype(func(number))
{
// ...
return {};
}
这是demo。关于c++ - 如何获得传递给模板化函数或类的函数的返回类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64519623/