首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++:如何使用std::invoke_result_t获得类成员函数的返回类型?

C++:如何使用std::invoke_result_t获得类成员函数的返回类型?
EN

Stack Overflow用户
提问于 2022-08-19 22:09:18
回答 1查看 128关注 0票数 1

如何使用std::invoke_result_t在C++中获得类成员函数的返回类型?

代码语言:javascript
运行
复制
#include <type_traits>
#include <vector>

template <class T>
struct C
{
    auto Get(void) const { return std::vector<T>{1,2,3}; }
};

int main(void)
{
 // what should one put below to make x to have type std::vector<int> ?
 std::invoke_result_t<C<int>::Get, void> x;
 //                   ^^^^^^^^^^^^^^^^^
 return 0;
}

非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-19 22:21:54

std::invoke_result_t可以处理类型,但C<int>::Get不是类型。它是一个非静态的成员函数.

C<int>::Get的类型是std::vector<int>(C<int>::)()C<int>的成员函数,它返回std::vector<int>,不接受参数。这种类型就是您需要给std::invoke_result_t的东西。或者更确切地说,是指向它的指针,因为您不能传递原始成员函数类型。

此外,std::invoke_result_t将第一个参数类型作为在处理成员函数指针时调用成员函数的对象类型。

因此,你需要:

代码语言:javascript
运行
复制
std::invoke_result_t<std::vector<int>(C<int>::*)(), C<int>>

或者,如果您不想写出整个成员函数类型:

代码语言:javascript
运行
复制
std::invoke_result_t<decltype(&C<int>::Get), C<int>>

演示

void参数列表等同于C++中的空参数列表。除非您想要与C代码共享函数声明,否则没有理由在void中显式指定C++参数列表。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73422693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档