std::result_of语法混乱

std::result_of syntax kerfuffle

本文关键字:语法 混乱 of result std      更新时间:2023-10-16

我有以下(CUDA(函数:

__device__ auto foo(my_class& x, my_function_ptr_type y ) {
return [gen](my_class& x) { return x.set_y(y); };
}

我想要 typedef 它的返回值的类型。我一直在摆弄 std::result_of 语法,但不能完全正确。这不起作用:

using foo_return_type = std::result_of<decltype(foo(my_class{}, my_function_ptr_type{nullptr}))>::type;

也不是这个:

using foo_return_type = std::result_of<decltype(foo(my_class, my_function_ptr_type))>::type;

也不是这个:

using foo_return_type = std::result_of<foo>::type;

应该有什么作为模板参数来std::result_of

笔记:

  • 命名空间中只有一个foo()
  • 不涉及任何模板(除了std::result_of...
  • C++11 或 C++14,随你选择(但请注意,这是 CUDA,所以理论上这可能是一个问题(。
  • 编译器:NVCC 10.1

您需要一个函数指针类型和参数类型,然后以F(ArgTypes...)的格式组合它们。

例如
using foo_return_type = std::result_of<decltype(&foo)(my_class&, my_function_ptr_type)>::type;


你也可以做自己的类型特征,如果你不坚持std::result_of,例如

template <typename F>
struct return_type_of_function {};
template <typename R, typename... Args>
struct return_type_of_function<R(Args...)> {
using type = R;
};

然后

using foo_return_type = return_type_of_function<decltype(foo)>::type;