问题标签 [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.
c++ - 为 std::unordered_map 中的 const std::reference_wrapper 重载 operator==
我不知道如何std::string
使用. 根据以下链接,我了解我需要重载。std::unordered_map
std::reference_wrapper
operator==
为什么 `std::reference_wrapper`s 中不能推导出模板实例?
但是,我不知道如何编写operator==
它需要一个const std::reference_wrapper
。如果包装器不是const则不会有问题。
使用 char 而不是std::string
工作正常(不需要重载operator==
)。
代码:
编译错误:
c++ - C++ 中的多态性,带有基类和 reference_wrapper 的向量
对于存储在向量中的对象,我需要在 C++ 中使用多态性。
从其他问题中了解,向量中的对象需要通过引用存储,否则会发生对象切片。
我的理解是 std::reference_wrapper 会很合适,但我在实现它时遇到了一些问题。
ActorRecordingItem 是基类,ActorVehicleEnterRecordingItem 是需要多态性的类的示例(通过 ActorVehicleRecordingItem 从 ActorRecordingItem 继承)
具有需要多态性的对象的向量存储在另一个类 Actor 中。目前定义为
随着关键方法的实施
actorRecordingItems 在单独的方法中创建并分配给actor。这是通过
最后是我想使用它们并需要多态性的位置。
最后一行似乎导致程序崩溃。我真的有点迷失从哪里开始研究这个问题,所以任何帮助将不胜感激
PS很抱歉这个很长的问题:)
c++11 - 为什么 reference_wrapper 对于内置类型的行为不同?
std::reference_wrapper
对于内置类型 ( double
) 和用户定义类型 ( ),我有以下用法std::string
。
为什么在流运算符的情况下它们的行为不同?
http://coliru.stacked-crooked.com/a/fc4c614d6b7da690
为什么在第一种情况下 DR 被转换为 double 并打印,而在第二种情况下却不是?有解决办法吗?
好的,我现在看到了,在 ostream 案例中,我试图调用一个未解析的模板函数:
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
.
c++ - 如何转换 std::vector> 到 std::vector
我有一个本地的std::vector<std::reference_wrapper<T> >
,现在我想返回其元素的真实副本(即std::vector<T>
)。有比循环更好的方法吗?
例子:
c++ - 这是对reference_wrapper的好用吗?
据我了解,C++ 模板类reference_wrapper
对于容器和元组中的引用很有用,因为它本质上为普通引用提供了复制构造函数和赋值运算符。换句话说,它似乎是一个不允许为空的指针。
基于这种理解,我尝试实现一个std::cout
默认打印字符串的类,但允许用户用文件覆盖它。这可能对任何现实世界的程序都没有用;我只是在这里举个例子。作为现代 C++ 的练习,我想避免使用 new/delete 并依赖 RAII 功能。下面是这个类的样子:
一切都按预期工作,但这与reference_wrapper
我在网上找到的示例完全不同。这是否被认为是有效的使用reference_wrapper
?是否有更好的替代方案使用现代 C++ 功能,例如自动资源管理和 RAII?
c++ - 为什么我不能对 reference_wrapper 的向量进行排序?
我想要 a 的排序视图,std::vector<std::chrono::milliseconds>
但我不想修改原始容器。std::reference_wrapper
似乎很适合这个,它适用于整数向量。
我创建了这个小例子:
这会产生预期的输出(当然除了sorted_durations
没有排序,因为它被注释掉了):
正如你所看到的,整数的原始向量numbers
并没有被排序操作所改变sorted_numbers
——这正是我想要的sorted_durations
向量。但是当我取消注释该行时,我的编译器与我非常矛盾,我必须承认我无法弄清楚它试图告诉我什么。我的编译器是 clang++ 3.8 版,我像这样构建示例程序:
这是我得到的错误输出:
它实际上持续了一段时间,但stackoverflow不会让我发布错误的所有55000个字符。
谁能向我解释我做错了什么或者为什么这根本不可能(如果是这样的话)?
c++ - 预留一个reference_wrapper对象的向量,怎么可能?
std::reference_wrapper
不是默认可构造的。所以我不能写任何:
但是,令我惊讶的是,您可以调用对象std::vector::reserve
向量的成员函数std::reference_wrapper
并有效地更改其容量。
std::reference_wrapper
由于没有默认构造函数,这怎么可能?
c++ - std::reference_wrapper 的实现
在查看std::reference_wrapper
here的实现时
构造函数和运算符对我来说很明显,但我不明白这部分
有人可以为我简化它...将不胜感激
编辑:很高兴为operator()
of提供有用的示例std::reference_wrapper
c++ - reference_wrapper 实现细节
这个模板化的 operator() 如何在 reference_wrapper 实现中工作
就这样:
为什么我们仍然需要 operator() ?这个怎么运作?
返回内容“result_of::type”是什么?
什么是 (ArgTypes && ..) ??
调用(获取)???
这段代码看起来像来自另一个星球的 C++ :)