问题标签 [perfect-forwarding]

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 回答
515 浏览

c++ - 右值引用和完美转发

我读过几篇关于 && 的论文,我只是好奇是否有:

或者只是通过'r'就足够了?

0 投票
6 回答
71102 浏览

c++ - make_unique 和完美的转发

std::make_unique为什么标准 C++11 库中没有函数模板?我发现

有点冗长。下面的不是更好吗?

new很好地隐藏了类型,并且只提到了一次类型。

无论如何,这是我尝试实现的make_unique

我花了很std::forward长时间来编译这些东西,但我不确定它是否正确。是吗?究竟是什么std::forward<Args>(args)...意思?编译器对此有何看法?

0 投票
2 回答
361 浏览

variadic-functions - 将可变参数宏转换为可变参数模板函数?

给定以下形式的可变参数宏:

——如何将其重写为可变参数函数模板?

更新:我对如何声明Args:&&const&什么的引用类型特别感兴趣?

更新:请注意,FType 应该是一个“普通”函数指针。

0 投票
4 回答
927 浏览

c++ - 结合两个复制和移动的构造函数

目前,我的玩具类模板之一有两个看起来非常相似的构造函数:

我可以将它们组合成一个构造函数模板,还是会以某种方式改变语义?

0 投票
3 回答
5799 浏览

c++ - C++ 统一赋值运算符移动语义

编辑:已解决见评论——不知道如何在没有答案的情况下标记为已解决。

在观看了有关 C++0x 中的完美转发/移动语义的第 9 频道视频后,我有些相信这是编写新赋值运算符的好方法。

这应该允许将 r 值和 const& s 分配给它。通过使用适当的构造函数构造一个新对象,然后用 *this 交换内容。这对我来说似乎是合理的,因为没有数据被复制超过它需要的。指针算法很便宜。

但是我的编译器不同意。(g++ 4.6) 我得到了这些错误。

难道我做错了什么?这是不好的做法(我认为没有办法测试你是否是自我分配的)?编译器还没有准备好?

谢谢

0 投票
1 回答
250 浏览

d - D中的完美转发?

tl; dr:你如何在 D 中进行完美转发?


该链接有一个很好的解释,但例如,假设我有这个方法:

如何创建另一个方法,bar()可以代替foo()调用,随后foo()“完美”调用(即在调用站点不引入编译/范围/等问题)?

天真的方法

当然不起作用,因为它不处理ref, in, out, inout,const方法的 -ness , pure-ity,nothrow等......并且它还限制了值如何与 r 值一起使用。

而且我不知道如何处理这些可能的情况......有什么想法吗?

0 投票
1 回答
209 浏览

c++ - 我如何制作一个允许所有 l-value ref、r-value ref 和 initializer_list 的模板化构造函数?

我正在尝试设计一个具有两个大序列向量的类。

好吧,它工作得很好,但它不使用向量的移动构造函数。因此,我尝试更改构造函数以接受具有完美转发的 r 值引用。

现在我遇到了一个问题。当我尝试使用 initializer_list 构造实例时,出现这样的错误。

我认为这std::initializer_list<double>可能无法转换为std::vector<double>,但它实际上是可转换的,当我尝试不使用 enable_if 参数时遇到了同样的错误。我错过了什么吗?

0 投票
1 回答
1693 浏览

c++ - 完美转发和 std::tuple (或其他模板类)

我在完美转发方面遇到了一些困难。

这是我目前的理解水平:胶水模板 + 右值引用 + std::forward 和一个特殊的神奇模式被激活,其中模板推导规则的含义与往常不同,但经过精心设计以允许完美转发。例子 :

但是如果 T 实际上是一个模板类会发生什么呢?例如,如何完善转发 std::tuple ?如果使用 T&& 作为 aboce,我将丢失元组中包含的对象的所有类型信息。
但是以下代码不起作用:

最后的 gcc 快照说:

很明显,我们仍然处于一般的、非模板的情况下,左值不能绑定到右值引用。“完美转发模式”未激活

所以我试图偷偷摸摸地将我的元组作为模板模板传递:

但我仍然得到同样的错误。

0 投票
1 回答
3421 浏览

c++ - 为什么`const int ci = 2; 标准::转发(ci);` 工作以及如何修复/解决它?

简单的问题,为什么以下工作不起作用(暗示 的副本ci)?

prog.cpp:在函数'int main()'中:
prog.cpp:6:23:错误:没有匹配函数调用'forward(const int&)'

在编写一些模板内容时,问题就表现出来了,我有一个简单的持有人类型,如下所示。为了避免不必要的复制,我尽可能使用完美转发,但这似乎是问题的根源。

如果需要任何进一步的信息,请告诉我。
非常感谢任何解决此问题的想法。

0 投票
1 回答
4336 浏览

c++ - 为什么一个完美的转发功能必须模板化?

为什么以下代码有效:

但不是:

为什么示例 2 中的左值没有以与示例 1 中相同的方式解析?

此外,为什么标准认为需要在 std::forward 中提供参数类型而不是简单地推导它很重要?简单地向前呼叫表示意图,无论类型如何。

如果这不是标准的东西而只是我的编译器,我正在使用 msvc10,这将解释糟糕的 C++11 支持。

谢谢

编辑 1:将文字“Hello World”更改为 std::string("Hello World") 以生成右值。