问题标签 [result-of]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
478 浏览

c++ - C++11:std::result_of<> 模板参数与 std::function<>

我确实对std::result_of<>.

因此,如果我理解正确,R (Args..)编译器应该将表单解释为采用类型参数Args...和返回类型的函数类型R,并且在指定时使用非常合理std::function<int(int)>,它声明了一个函数类型int作为其唯一参数,并返回int

但是,当在上下文中使用相同的概念时,上面的含义突然发生了变化std::result_of<F(Args...)>(注意,我更改RF,并删除了 and之间的(空格)以表示差异-根据 cppreference, 的含义变成了编译时间表达式 - 我的意思是,我有点理解 的主要目的是使用 的概念来选择正确的重载(如果存在多个重载),当然还可以推断出这种调用的返回类型(在编译时解析期间) - 实际上,这大致类似于:- 但是,- 与F(F(Args...)INVOKEstd::result_of<F(Args...)>INVOKEdecltype(std::declval<F>()(std::declval<Args>()...))F (Args...)std::function<R (Args...)>case - 编译器会解释为一个函数类型,接受Args...并返回类型F,现在F是我们试图获取返回类型的函数类型!

当然,在 and 的帮助下decltypestd::declval实现std::result_of似乎是合理的,但是我读到了result_of在 C++98/03 中以某种方式实现的 boostdecltype并且std::declval不存在 - 我想知道这怎么可能(也许有一些非常 hack '小把戏)?

所以重新迭代:R (Args...)在作为模板参数的上下文中的概念是否总是被解释/推断为具有返回类型的函数类型R,无论封闭模板是std::function<>还是std::result_of<>?虽然std::result_of<>以某种方式对“返回类型”进行了某种重新解释F,并“返回”了定义的实际返回类型std::result_of<F(Args...)>::type?或者std::result_of<F(Args...)>只是解释F(Args...)不同,所以它知道这是一个神奇的INVOKE表达?

感谢您即将进行的澄清!

0 投票
1 回答
213 浏览

c++ - c++ 如何定义一个 std::result_of可以处理 R 是无效的

当我使用

像这样:

由于R是另一个函数的输出类型,所以R可能是void,在这种情况下,会有:

所以问题是如何处理既是Rvoid不是?

0 投票
3 回答
3270 浏览

c++ - 错误:`class std::result_of` 中的`type` 没有命名类型

下面的示例在我尝试过的所有编译器中都失败了:gcc-8.2、clang-8.0(两个选项都已尝试)--std=c++17std=c++2azapcc-2017.08。

从我的角度来看,代码示例是有效的,应该被编译。或者,至少,应该有一个更全面的错误。它看起来确实像 std 库中的一个错误,没有涵盖result_of. 我错了吗?

0 投票
1 回答
809 浏览

c++ - 将 invoke_result 与 void 参数类型一起使用?

我正在尝试执行以下操作:

std::invoke_result的文档表明它应该可以正常工作(即没有),特别Argsvoid它说 void case 不工作是 now deprecated 的“怪癖” std::result_of

但不,void不起作用。这是有道理的,因为一个也不能做std::declval<T>()for T = void,并且std::invoke_result应该根据std::declval.

问题是,修补代码以使用 void 的最优雅/直接的方法是什么?我可以做点什么,std::conditional但我期望更好。(使用 C++17)

相关问题:这个这个

0 投票
2 回答
356 浏览

c++ - 我可以从签名中获取函数的返回类型吗?

所以我有很多类似于这些的功能:

对于这些函数中的每一个,我都有一个使用这些函数的返回类型的包装器,因此它看起来像这样:

正如你所看到decltype(declval<T>().x)的,所有这些都变得非常难以阅读。我可以模板 ausing还是有一些标准函数允许我从函数指针中提取返回类型而不将参数类型传递给decltypeor result_of?所以是这样的:

0 投票
0 回答
37 浏览

c++ - 成员参数扣除的可变参数模板

我有一个包装 std::future 的类。他是对模板指定的通用函数和可变参数模板指定的参数进行异步调用的结果。

现在我想将另一个类的成员函数传递给 AsyncTask。此成员函数将定期运行一个通用函数。我设法让它工作,你可以在这里看到解决方案。

我发现我的解决方案非常难看,我想改进 m_task 的类型和构造。就像是:

我尝试了很多东西,但我没有得到类型。有人有建议吗?

0 投票
1 回答
53 浏览

c++ - 为什么带有type参数的operator()可以在result_of的上下文中应用于type?

据我了解,result_of_t应该是一种类型,它将在表达式的评估结束时。decltype(&foo)在下面的代码中产生了类型int (*)(int),但是(int)外面的decltype呢?

0 投票
1 回答
60 浏览

c++ - std::result_of 语法混乱

我有以下(CUDA)功能:

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

也不是这个:

也不是这个:

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

笔记:

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