问题标签 [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 回答
2367 浏览

c++ - 与类一起使用时,std::reference_wrapper 编译错误“没有命名成员”

所以我std::reference_wrapper在 C++11 中发现了这些奇特的东西,我发现它可能对未来的程序开发很有用。我玩了一会儿,我认为它可以在某些情况下替换旧的参考以获得更好的使用,直到我遇到以下错误:

这会导致 gcc 出错(我使用 Code::Blocks 作为编辑器,使用 gcc 作为编译器)

如果线

改为:

然后一切都按我的预期进行。

我该如何解决这个问题,或者这只是我 std::reference_wrapper作为参考的一般改进的误解?

0 投票
1 回答
130 浏览

c++ - 非默认可构造和 std::reference 包装器替代品的序列化

我尝试序列化我的(神经)网络,但目前卡住了。问题似乎是您无法序列化std::reference_wrapper. 我不确定我是否应该改变对上层节点的引用的存储方式,或者想出一种方法来序列化它们。

是否有reference_wrappers 的替代品,我忽略了它并且仍然避免使用 c 样式指针?(据我所知,这是要避免的)

0 投票
1 回答
259 浏览

c++ - `push_back` 到 `vector<reference_wrapper>` 导致索引 0 处的字符串为空

我有两个类,它们是没有覆盖的直接继承,所以它们基本上是:vector<string> listvector< reference_wrapper<string> > filtered. 这个想法是我想将所有值存储到list,然后filtered用来自list.

现在,当我这样做时,filtered.push_back()如果它的大小为 1,索引 0 处的引用将返回一个空字符串(长度 = 0)。

为什么会这样?


这是一个例子:

0 投票
2 回答
1910 浏览

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 GamePieces are definitely owned by the GamePlayers, and that's why I want to use references.

0 投票
2 回答
365 浏览

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符合标准的情况下获得结果?

0 投票
1 回答
2092 浏览

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 中发挥了作用,但它实际上在容器中还有其他用途,如参考页面中所述。有没有我遗漏的东西可以代替那个用例,或者我错过了关于这种情况的其他东西?

如果这个有用的特性被删除了,我们应该在需要的时候实现它,还是有某种原因表明整个模式是不安全的?

0 投票
1 回答
322 浏览

c++11 - 右值引用,std::reference_wrappers 和 std::function

我正在阅读 r 值引用和移动语义。不幸的是,用 std::function 和 std::reference_wrapper 进行实验让我更加困惑。

  1. 对 std::function 的 r 值引用实际上如何接受 l 值,例如。以防万一Greeting g("World",eng),任何其他参数都不能接受类似的左值(除了模板化构造函数并进行通用引用之外?)?
  2. 将 std::ref 传递给 std::function 时实际发生的情况,ref提到仅转发参数。但是,如果我在注释掉的 g4 显示时移动函数对象本身,我会看到 g2 的输出,它使用 std::ref 来实际看到移动的效果,只是打印 world2

  3. 移动后可调用对象会发生什么情况,字符串本身会移动,但函数仍然有效?(对于不同类型的函数对象,比如 struct f{void operator()() { //something }),这是否意味着 f 在移动后可能有效?)

0 投票
1 回答
1027 浏览

c++ - 有关 std::reference_wrapper 移除的设计

我正在尝试std::reference_wrapper在另一个向量的所有元素上使用。但是当我删除原始元素时,我想自动删除引用向量中的元素。我做了一些解决方法,但它们很难看。有什么建议么?

0 投票
1 回答
556 浏览

c++ - 在 C++11 中使用 reference_wrapper 而不是标准指针访问类成员

我正在尝试构建一个作为我班级成员unordered_mapvector变量。我可以使用标准指针来做到这一点*,但这需要使用(*x)来访问向量。我想知道是否std::reference_wrapper会更清洁,但无法让它工作。

0 投票
1 回答
65 浏览

c++ - 如何将数据传递给引用包装器

考虑以下代码:

我想知道初始化foobar. 如果是这样,每种解决方案的优缺点是什么,应该首选哪个?