繁体   English   中英

C++:如何使用 std::invoke_result_t 获取 class 成员 function 的返回类型?

[英]C++: How can one get return type of a class member function using std::invoke_result_t?

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

#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;
}

非常感谢您的帮助!

std::invoke_result_t适用于types ,但C<int>::Get不是类型。 它是一个非静态成员 function。

C<int>::Get类型std::vector<int>(C<int>::)()C<int>的成员 function 返回std::vector<int>并且不接受任何参数。 该类型是您需要提供给std::invoke_result_t的类型。 或者更确切地说,指向它的指针,因为您不能传递原始成员 function 类型。

此外, std::invoke_result_t将第一个参数类型视为 object 的类型,当它处理指向成员函数的指针时,在该类型上调用成员 function。

因此你需要:

std::invoke_result_t<std::vector<int>(C<int>::*)(), C<int>>

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

std::invoke_result_t<decltype(&C<int>::Get), C<int>>

演示


旁注: void参数列表相当于 C++ 中的空参数列表。 没有理由在 C++ 中明确指定void参数列表,除非您想与 C 代码共享 function 声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM