问题标签 [reference-wrapper]

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

c++ - 为 std::unordered_map 中的 const std::reference_wrapper 重载 operator==

我不知道如何std::string使用. 根据以下链接,我了解我需要重载。std::unordered_mapstd::reference_wrapperoperator==

为什么 `std::reference_wrapper`s 中不能推导出模板实例?

但是,我不知道如何编写operator==它需要一个const std::reference_wrapper。如果包装器不是const则不会有问题。

使用 char 而不是std::string工作正常(不需要重载operator==)。

代码:

编译错误:

0 投票
1 回答
1003 浏览

c++ - C++ 中的多态性,带有基类和 reference_wrapper 的向量

对于存储在向量中的对象,我需要在 C++ 中使用多态性。

从其他问题中了解,向量中的对象需要通过引用存储,否则会发生对象切片。

我的理解是 std::reference_wrapper 会很合适,但我在实现它时遇到了一些问题。

ActorRecordingItem 是基类,ActorVehicleEnterRecordingItem 是需要多态性的类的示例(通过 ActorVehicleRecordingItem 从 ActorRecordingItem 继承)

具有需要多态性的对象的向量存储在另一个类 Actor 中。目前定义为

随着关键方法的实施

actorRecordingItems 在单独的方法中创建并分配给actor。这是通过

最后是我想使用它们并需要多态性的位置。

最后一行似乎导致程序崩溃。我真的有点迷失从哪里开始研究这个问题,所以任何帮助将不胜感激

PS很抱歉这个很长的问题:)

0 投票
1 回答
399 浏览

c++11 - 为什么 reference_wrapper 对于内置类型的行为不同?

std::reference_wrapper对于内置类型 ( double) 和用户定义类型 ( ),我有以下用法std::string

为什么在流运算符的情况下它们的行为不同?

http://coliru.stacked-crooked.com/a/fc4c614d6b7da690

为什么在第一种情况下 DR 被转换为 double 并打印,而在第二种情况下却不是?有解决办法吗?


好的,我现在看到了,在 ostream 案例中,我试图调用一个未解析的模板函数:

0 投票
1 回答
839 浏览

c++ - 比 std::reference_wrapper 更好地模拟 C++ 引用的类型

我正在设计一个行为类似于 C++ 引用但做一些额外的工具(簿记)的类。

最初我认为这std::reference_wrapper<T>将是一个很好的模型。但过了一会儿,我意识到std::reference_wrapper<T>即使在原则上,它也不像 C++ 引用那样表现,因为赋值重新绑定了内部指针。

我当然可以为我自己的类改变这种行为(而不是重新绑定),但我认为可能已经有一个模拟引用的类。例如像“ std::real_reference<T>”这样的东西。

是否有更紧密地模拟引用的类(标准或非标准)?

我认为它也很有用,例如在许多地方,人们认为 std::vector<std::reference_wrapper<T>>它是一种替代方案,std::vector<T&>但这具有误导性,因为语义不同,但可以通过一些修改来实现std::vector<std::real_reference<T>>


我现在认为,如果一个“完美”的引用包装是可能的,那么引用可以只用指针来实现,我们不需要T& ,而只是简单地拥有一个在所有方面都reference<T>完全一样的库功能T&......

...这反过来意味着该语言可以允许您“重载”&类型上的属性以生成自定义类型而不是语言参考。例如using mytype& = custom_reference_emulator_of_mytype.

0 投票
2 回答
677 浏览

c++ - 如何转换 std::vector> 到 std::vector

我有一个本地的std::vector<std::reference_wrapper<T> >,现在我想返回其元素的真实副本(即std::vector<T>)。有比循环更好的方法吗?

例子:

0 投票
0 回答
485 浏览

c++ - 这是对reference_wrapper的好用吗?

据我了解,C++ 模板类reference_wrapper对于容器和元组中的引用很有用,因为它本质上为普通引用提供了复制构造函数和赋值运算符。换句话说,它似乎是一个不允许为空的指针。

基于这种理解,我尝试实现一个std::cout默认打印字符串的类,但允许用户用文件覆盖它。这可能对任何现实世界的程序都没有用;我只是在这里举个例子。作为现代 C++ 的练习,我想避免使用 new/delete 并依赖 RAII 功能。下面是这个类的样子:

一切都按预期工作,但这与reference_wrapper我在网上找到的示例完全不同。这是否被认为是有效的使用reference_wrapper?是否有更好的替代方案使用现代 C++ 功能,例如自动资源管理和 RAII?

0 投票
2 回答
1543 浏览

c++ - 为什么我不能对 reference_wrapper 的向量进行排序?

我想要 a 的排序视图,std::vector<std::chrono::milliseconds>但我不想修改原始容器。std::reference_wrapper似乎很适合这个,它适用于整数向量。

我创建了这个小例子:

这会产生预期的输出(当然除了sorted_durations没有排序,因为它被注释掉了):

正如你所看到的,整数的原始向量numbers并没有被排序操作所改变sorted_numbers——这正是我想要的sorted_durations向量。但是当我取消注释该行时,我的编译器与我非常矛盾,我必须承认我无法弄清楚它试图告诉我什么。我的编译器是 clang++ 3.8 版,我像这样构建示例程序:

p>

这是我得到的错误输出:

它实际上持续了一段时间,但stackoverflow不会让我发布错误的所有55000个字符。

谁能向我解释我做错了什么或者为什么这根本不可能(如果是这样的话)?

0 投票
3 回答
1093 浏览

c++ - 预留一个reference_wrapper对象的向量,怎么可能?

std::reference_wrapper不是默认可构造的。所以我不能写任何:

但是,令我惊讶的是,您可以调用对象std::vector::reserve向量的成员函数std::reference_wrapper并有效地更改其容量。

现场演示

std::reference_wrapper由于没有默认构造函数,这怎么可能?

0 投票
1 回答
835 浏览

c++ - std::reference_wrapper 的实现

在查看std::reference_wrapper here的实现时

构造函数和运算符对我来说很明显,但我不明白这部分

有人可以为我简化它...将不胜感激

编辑:很高兴为operator()of提供有用的示例std::reference_wrapper

0 投票
1 回答
768 浏览

c++ - reference_wrapper 实现细节

这个模板化的 operator() 如何在 reference_wrapper 实现中工作

就这样:

为什么我们仍然需要 operator() ?这个怎么运作?

返回内容“result_of::type”是什么?

什么是 (ArgTypes && ..) ??

调用(获取)???

这段代码看起来像来自另一个星球的 C++ :)