如何获取类方法的返回类型?

How to get return type of class method?

提问人:mouse_00 提问时间:6/30/2023 最后编辑:JeJomouse_00 更新时间:6/30/2023 访问量:106

问:

我尝试使用,但无法管理它。std::result_of

#include <type_traits>

class Foo
{
public:
    int foo();
};

int main() 
{
    using return_type = std::result_of_t<Foo::foo()>; // error
    return 0;
}

那么如何获取返回类型呢?Foo::foo

C++ 模板 返回 类型特征 成员函数 17 C++ 20

评论

0赞 mouse_00 6/30/2023
@NathanOliver-IsonStrike,它不适用,因为答案是函数而不是类方法
0赞 NathanOliver 6/30/2023
对不起,链接错误。正确一:stackoverflow.com/questions/50716296/...
0赞 NathanOliver 6/30/2023
stackoverflow.com/questions/43398169/...

答:

0赞 273K 6/30/2023 #1

Foo::foo()不是类型,需要函数类型。std::result_of

#include <type_traits>

class Foo
{
 public:
  int foo();
};

int main() {
  using return_type = std::result_of<decltype(&Foo::foo)>;
  return 0;
}
3赞 JeJo 6/30/2023 #2

如何获取 的返回类型?Foo::foo

您可以按如下方式使用 std::invoke_result

#include <type_traits>      // std::invoke_result_t

using return_type = std::invoke_result_t<decltype(&Foo::foo), Foo>;

观看 godbolt.org 中的演示

或使用 std::d eclval

#include <utility>     // std::declval

using return_type = decltype(std::declval<Foo>().foo());

观看 godbolt.org 中的演示


旁注:在 c++ 中已弃用,在 中删除。因此,将来升级到 C++20 时,您的代码库必须更新/更改,以防您使用它。阅读更多:std::result_of_t

“std::result_of”在 C++17 中被弃用的原因是什么?