当前位置: 首页 > 知识库问答 >
问题:

如何在std::对中转发不可移动对象

朱高丽
2023-03-14

当一个std::pair包含不可移动的内容时,我不知道如何完美地转发它。

#include <mutex>
#include <list>
#include <utility>

struct A
{
    A(int x)
    {

    }
};

int main()
{
    std::list<std::pair<std::mutex, std::mutex>> v;
    v.emplace_back(); // ok

    std::list<std::pair<A, A>> v2;
    v2.emplace_back(3, 4); // ok

    std::list<std::pair<A, std::mutex>> v3;
    v3.emplace_back(3, std::forward<std::mutex>(std::mutex{})); // help
}

共有1个答案

齐胜涝
2023-03-14

必须从空参数列表中就地构造std::mutex。这可以使用std::pieclewise_construct构造函数来实现,它允许您将两个元素的构造函数的参数转发为std::tuples。

// for std::forward_as_tuple
#include<tuple>

// ...

v3.emplace_back(std::piecewise_construct, std::forward_as_tuple(3), std::forward_as_tuple());
 类似资料:
  • 我正在使用STD::UNIQUE_PTR在类上创建一些公共成员,这些成员必须是不可复制或可移动的。但是STD::UNIQUE_PTR是可移动的,我想知道如果有人移动STD::UNIQUE_PTR包含的指针,然后我尝试访问被移动的那个类的STD::UNIQUE_PTR成员,会发生什么。 我所需要的就是使std::unique_ptr不可移动,并简单地保存一个唯一的指针,该指针不能从拥有它的类中移动或

  • 移动对象 可以通过以下方式移动对象:使用特定工具拖动对象、使用键盘上的箭头键,或在面板或对话框中输入精确数值。 在移动对象时,您可以使用对齐功能来帮助定位对象。例如,您可以使指针对齐参考线和锚点,也可以使对象边界对齐网格线。还可以使用“对齐”面板,根据对象之间的相对位置来对其进行定位。 然后,您便可以使用 Shift 键来限制一个或多个对象的移动,使其沿相对当前 x 轴和 y 轴的精确水平、垂直或

  • 由于这是一个热门的话题,这些天,我无法理解某些概念。请原谅,如果我听起来很愚蠢,但当我试图创建不可变对象时,我发现大多数帖子如下 null null 此测试用例失败并打印Cassandra。 如果我做错了什么让我知道。

  • 我用的是Three。js创建100个立方体的动画。对于每个立方体,我设置其几何体和材质,然后使用:scene将其添加到场景中。添加(多维数据集);我一直将立方体的位置存储在三个数组中:cube_x[99]cube_y[99]cube_z[99] 我不知道如何在修改渲染器时告诉它们的位置。当场景中只有一个立方体时,以下方法适用于一个立方体: 立方体位置。x=300;cube.position.y=0

  • Kotlin有一个const关键字。但我不认为kotlin中的常数是我所认为的。这似乎与C中的const非常不同。在我看来,its仅适用于静态成员和Java中的原语,不针对类变量进行编译: 由于这似乎不起作用,我认为我真正想要的是第二个类,它删除我不想支持的操作: 这种方法的明显缺点是,我不能忘记更改这个类,以防我更改,这对我来说非常危险。 但是我不确定如何做到这一点。所以问题是:如何用意识形态静