c++ 如何在向量元组中构造不可复制的对象?[副本]

8tntrjer  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(149)

此问题已在此处有答案

How to create a tuple of non-copyable objects(1个答案)
How to initialize a tuple with a given class having no copy constructor(1个答案)
Initialize a tuple of non-copyable and non-movable classes(1个答案)
6天前关闭。
我有一个不可复制的类A,我想把它移到一个元组向量中(见下面的代码)。我理解为什么下面的代码不起作用,但我想知道是否有一种聪明的方法可以在不改变我的类的实现的情况下使它起作用。任何帮助都非常感谢。Thanks:)

#include <iostream>
#include <vector>
#include <tuple>

class A {
    public:
    int val1;
    int val2;

    A(int v1, int v2): val1(v1), val2(v2) {}

    // make non-copyable
    A(const A &other) = delete;
    A &operator=(const A &other) = delete;
};

int main() {
    std::vector<std::tuple<int, int, A>> my_as;

    my_as.emplace_back(4, 3, A(4, 2)); // Error, how to fix this?

    return 0;
}
fkaflof6

fkaflof61#

解决这个问题的一种可能的方法是使用像这样的唯一指针。

#include <iostream>
#include <vector>
#include <tuple>
#include <memory>

class A {
    public:
    int val1;
    int val2;

    A(int v1, int v2): val1(v1), val2(v2) {}

    // make non-copyable
    A(const A &other) = delete;
    A &operator=(const A &other) = delete;
};

int main() {
    std::vector<std::tuple<int, int, std::unique_ptr<A>>> my_as;

    my_as.emplace_back(4, 3, std::make_unique<A>(4, 2));
    return 0;
}

相关问题