c++ - 如何获得传递给模板化函数或类的函数的返回类型?

标签 c++ c++11 templates template-classes

如何以这种方式获取函数的返回类型(传递给高阶函数/类):

template <typename F>
auto DoSomething(F&& func) -> /* whatever type func returns */
{
    // whatever...
    return /* something that is func's type */
}
编辑:尤其是如果func需要T类型的参数。
我的直觉是decltypedeclval应该在图片中,但是到目前为止我还没有碰到任何麻烦。
更全面的上下文:
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/

相关文章:

C++,在大文件的一行上搜索单词的算法?

c++ - 为什么 `std::reference_wrapper` 秒内不能推导出模板实例?

c++ - 将函数放入模板

c++ - 为什么 lambda 对象中的局部变量是 const?

c++ - 在定义之前显式实例化模板函数

c# - 编译 C++ .lib 文件使它们成为 C# 环境的 DLL

C++11 正则表达式分组

c++ - 是否有可能 "copy"一个模板化类派生自非模板化基类的对象?

c++ - 可能的堆损坏(win 32, native c++)

c++ - 如何创建一个隐藏多层 vector 并将其公开为单个范围的 Boost.Range?