问题标签 [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 投票
1 回答
122 浏览

c++ - 多态函子上的 std::result_of

我正在尝试std::result_of在仿函数上使用。为什么我会得到这些结果?

0 投票
1 回答
402 浏览

c++ - 我可以编写一个返回函数的函数类型吗?

以下无法在 gcc 和 clang 上编译

两个编译器上的错误都涉及声明函数返回函数的非法性。但我没有声明这样的函数——我只是想写它的类型——因为这是result_of预期的。这真的还是病态吗?

0 投票
3 回答
199 浏览

c++ - 避免重复 SFINAE 区分无效和非无效返回类型

一些通用的代码操作函数,需要根据函数是否有返回值来进行不同的操作。例如,从这个问题中借用一个问题,假设我们需要编写一个time_it函数,接受一个函数和一些参数,运行它,并打印经过的时间。下面的代码可以做到这一点:

可以看出,函数返回值与否的情况是有区别的。在前一种情况下,必须存储值,打印经过的时间,并返回值;在后一种情况下,打印经过的时间后,无需再做任何事情。

问题是如何处理这两种情况:

  1. 上面的代码使用std::enable_ifand is_void,但是第一个(本身很麻烦)参数is_void被重复作为最后一个参数enable_if- 这很麻烦并且有味道,尤其是。尽可能多的身体重复。

  2. 上述答案通过将经过的时间打印为调用某个经过的计时器类的析构函数的副产品来绕过该问题。这是个好主意,但在更复杂的用途中会导致代码复杂(大量工作是在某个单独类的析构函数中完成的——这不是自然流程)。

有没有更好的方法来做到这一点?

0 投票
2 回答
3900 浏览

c++ - 采用引用参数的 C++ 线程编译失败

上面的代码编译失败并出现以下错误消息

我知道我可以std::ref()用来传递论点。但是,如果我按值传递,为什么会出现错误,因为应该只按thread复制参数并传递存储在线程内的一些对象以与 function 的引用参数绑定。f1

我觉得如果我能理解这result_of是在做什么以及为什么会出错,我就能更好地理解原因。那么任何人都可以引导我完成错误消息吗?尤其是std::_Bind_simple<void (*(double))(double&)>和的含义std::result_of<void (*(double))(double&)>

编辑:我知道如果我传递一个值,线程只会在副本上工作,并且在线程返回后没有效果。这不是我关心的问题。我想知道为什么它现在给出错误,但它没有给 SO 上的其他帖子给出错误,如下所示:指针和引用之间的差异作为线程参数

0 投票
1 回答
176 浏览

c++ - C++11对成员函数应用result_of,失败,为什么?

我有以下代码作为实验:

一切都很好,除了最后一个result_of:我试图获得返回类型Bar::f,使用result_of.

为什么它失败了,以及如何纠正它?

0 投票
3 回答
73 浏览

function - C++11 result_of 推断我的函数类型失败

我正在尝试以下程序:

“呼叫(回答)”无法编译

VC 说 'R call(F&)' 不能推断出 'R' 的模板参数

GCC 说 |注意:模板参数推导/替换失败:|错误:函数返回函数

我不确定“函数名称”是否可用于模板。我在哪里弄错了,如何让我的电话(接听)工作?

0 投票
1 回答
110 浏览

function - C++11:为什么 result_of 可以接受函子类型作为 lvalue_reference,但不能接受函数类型作为 lvalue_reference?

我有下面的程序:

它无法在“call(f)”行中编译。奇怪的是“call(obj)”没问题。

(1) 我在另一个线程C++11 result_of deducing my function type failed中有一个类似的帖子。但这并没有说明为什么函子对象可以,而函数却不行。

(2) 我不确定这是否与“R call(F&f)”有关:函数类型不能声明左值?

(3) 据我所知,任何有名字的记号,比如变量/函数,都应该被认为是左值。在函数参数的情况下,编译器应该将我的函数名“f”“衰减”为函数指针,对吧?

(4) 这就像衰减一个数组并将其传递给一个函数----并且函数指针可以是一个左值,那么“调用(F&f)”有什么问题?

您能否就“为什么”是我的情况提供进一步的解释,我在哪里做错了?谢谢。

0 投票
2 回答
332 浏览

c++ - result_of 用于具有 cv 限定参数的成员对象

鉴于以下声明:

在我尝试过的 gcc 6.2 和 Clang 编译器上,result_of<Mp(const MyClass)>::typeyield int&&

我的问题摘要:为什么int&&而不是要么const int&&或简单地int

更多背景:标准说result_of是这样定义的:

成员 typedef type 应命名类型 decltype(INVOKE(declval<Fn>(), declval<ArgTypes>()...));

该标准还以这种方式为指向成员对象的指针定义了 INVOKE:

— t1.*f 当 N == 1 并且 f 是指向类 T 的数据成员的指针并且is_base_of_v<T, decay_t<decltype(t1)>>为真时;

请注意,这decay_t仅用于测试此项目符号是否适用。据我所知,应用上述两点应该会产生:

哪个产量const int&&。那么,我是否遗漏了什么,或者编译器库错了?

编辑,2016 年 8 月 30 日:

感谢您的回复。有几个人提出了不使用result_of. 我应该澄清一下,我坚持正确定义的原因result_of是我实际上正在实现最接近result_ofC++11 之前编译器的合理实现。所以,虽然我同意我可以在 C++11 中使用decltypeor result_of<Mp(const MyClass&&)>::type,但它们并没有为 C++03 做我需要的事情。有几个人给出了正确的答案,那就是函数的 const rvalue 参数不是函数类型的一部分。这为我澄清了一些事情,我将实现我的 pre-C++11 result_of,以便它也丢弃那些限定符。

0 投票
1 回答
713 浏览

c++ - 在 'std::result_of<_Signature>::type' 之前需要 'typename' 因为 'std::result_of<_Signature>' 是一个依赖范围

我没有什么好的解决办法。我有一段代码:

编辑:这是标题

我有错误:

我尝试在使用 result_of 之前添加类型名,但它导致了其他错误:“无效使用不完整类型......”。

我想在 main 函数中看到类似的东西。我想将新任务添加到线程池之类的东西中。应尽可能少地给出模板参数。完美的解决方案是推论:-)。

0 投票
1 回答
304 浏览

c++ - 当返回值是模板类型时如何使用 std::result_of?

当 Callable 返回模板类型并出现以下错误(clang++)时,我正在尝试使用 result_of 。我还包括一个简单的案例,一切正常。

错误:

代码: