问题标签 [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::reference_wrapper 编译错误“没有命名成员”
所以我std::reference_wrapper
在 C++11 中发现了这些奇特的东西,我发现它可能对未来的程序开发很有用。我玩了一会儿,我认为它可以在某些情况下替换旧的参考以获得更好的使用,直到我遇到以下错误:
这会导致 gcc 出错(我使用 Code::Blocks 作为编辑器,使用 gcc 作为编译器)
如果线
改为:
然后一切都按我的预期进行。
我该如何解决这个问题,或者这只是我 std::reference_wrapper
作为参考的一般改进的误解?
c++ - 非默认可构造和 std::reference 包装器替代品的序列化
我尝试序列化我的(神经)网络,但目前卡住了。问题似乎是您无法序列化std::reference_wrapper
. 我不确定我是否应该改变对上层节点的引用的存储方式,或者想出一种方法来序列化它们。
是否有reference_wrapper
s 的替代品,我忽略了它并且仍然避免使用 c 样式指针?(据我所知,这是要避免的)
c++ - `push_back` 到 `vector<reference_wrapper>` 导致索引 0 处的字符串为空
我有两个类,它们是没有覆盖的直接继承,所以它们基本上是:vector<string> list
和vector< reference_wrapper<string> > filtered
. 这个想法是我想将所有值存储到list
,然后filtered
用来自list
.
现在,当我这样做时,filtered.push_back()
如果它的大小为 1,索引 0 处的引用将返回一个空字符串(长度 = 0)。
为什么会这样?
这是一个例子:
c++ - Initialize an array of reference_wrapper
Coming from C to C++, I'm trying to understand the world of smart pointers & references. I've got the following:
In the following situation, I would like each Player
to hold a vector<GamePiece>
and return references to these pieces, and put then in the _board
. However, the following initialization of my _board
yields
no default constructor exists for class "std::reference_wrapper
What am I missing here? In terms of ownership, each GamePlayer
is owned by the Game
(as can be seen), and the GamePiece
s are definitely owned by the GamePlayer
s, and that's why I want to use references.
c++ - 使用 -pedantic 编译时采用 std::reference_wrapper 的模棱两可的构造函数
我有一个具有复制构造函数和构造函数的类std::reference_wrapper
:
正常编译时(g++ --std=c++17 test.cpp
),它可以按要求工作,依次调用四个构造函数:
-pedantic
但是,使用(ie, )编译g++ --std=c++17 -pedantic test.cpp
会导致以下错误(以及另一个等效的错误std::cref
):
为什么会这样(即,我如何违反标准,在Conversion constructor vs. conversion operator: priority中回答),以及如何在不-pedantic
符合标准的情况下获得结果?
c++ - 为什么 `std::reference_wrapper` 在 c++17 中被弃用并在 c++20 中被删除?
从 C++11 开始,std::reference_wrapper
它是一个小的“shim”模板,它是一种类类型,可以从引用类型构造并转换为引用类型。它可以在可能不支持引用的通用容器中使用。
https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper
std::reference_wrapper 是一个类模板,它将引用包装在可复制、可分配的对象中。它经常被用作将引用存储在通常不能保存引用的标准容器(如 std::vector)中的一种机制。
此标准库功能在 C++17 中已弃用,并在当前的 C++20 草案中被删除。为什么?
std::reference_wrapper
使用不安全或在某些方面存在缺陷?
在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0619r3.html#2.0
中,这似乎被认为是“D.8 旧自适应函数绑定”的一部分,并且标准描述中的文本在std::reference_wrapper
“D.9.2 Typedefs to Support Function Binders [depr.func.adaptor.typedefs]”部分中被划掉
看起来我们正在删除它,因为它在旧的函数绑定器 API 中发挥了作用,但它实际上在容器中还有其他用途,如参考页面中所述。有没有我遗漏的东西可以代替那个用例,或者我错过了关于这种情况的其他东西?
如果这个有用的特性被删除了,我们应该在需要的时候实现它,还是有某种原因表明整个模式是不安全的?
c++11 - 右值引用,std::reference_wrappers 和 std::function
我正在阅读 r 值引用和移动语义。不幸的是,用 std::function 和 std::reference_wrapper 进行实验让我更加困惑。
- 对 std::function 的 r 值引用实际上如何接受 l 值,例如。以防万一
Greeting g("World",eng)
,任何其他参数都不能接受类似的左值(除了模板化构造函数并进行通用引用之外?)? 将 std::ref 传递给 std::function 时实际发生的情况,ref提到仅转发参数。但是,如果我在注释掉的 g4 显示时移动函数对象本身,我会看到 g2 的输出,它使用 std::ref 来实际看到移动的效果,只是打印 world2
移动后可调用对象会发生什么情况,字符串本身会移动,但函数仍然有效?(对于不同类型的函数对象,比如 struct
f{void operator()() { //something })
,这是否意味着 f 在移动后可能有效?)
c++ - 有关 std::reference_wrapper 移除的设计
我正在尝试std::reference_wrapper
在另一个向量的所有元素上使用。但是当我删除原始元素时,我想自动删除引用向量中的元素。我做了一些解决方法,但它们很难看。有什么建议么?
c++ - 在 C++11 中使用 reference_wrapper 而不是标准指针访问类成员
我正在尝试构建一个作为我班级成员unordered_map
的vector
变量。我可以使用标准指针来做到这一点*
,但这需要使用(*x)
来访问向量。我想知道是否std::reference_wrapper
会更清洁,但无法让它工作。
c++ - 如何将数据传递给引用包装器
考虑以下代码:
我想知道初始化foo
和bar
. 如果是这样,每种解决方案的优缺点是什么,应该首选哪个?