gpt4 book ai didi

c++ - 如何使用没有复制构造函数的给定类初始化元组

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:15:54 26 4
gpt4 key购买 nike

我有一个要求,需要按如下方式初始化元组。如何创建包含 A 类对象的元组?

#include <iostream>
#include <tuple>

using namespace std;

class A{
int a;

public:
A(const A&)=delete;
A(int a): a(a){}
};

std::tuple<A>& createTuple(A &&a){
return std::make_tuple<A>(std::forward<A>(a));
}
int main(){
std::cout << std::get<0>(createTuple(std::forward<A>(A(1))));
}

我不能以任何方式修改 A 类。

最佳答案

像这样:

std::tuple<A> t(1);

A自从你 delete 以来,没有隐式声明的移动构造函数d 复制构造函数(顺便说一句,它应该采用 A const&),因此您尝试使用的表单在 tuple 之外无效。无论如何:

A a = A(1); // error

如果你需要一个移动构造函数,你需要显式地写一个:

A(A&& rhs) = default;

这会在什么时候起作用:

std::tuple<A> t(A(1));

请注意 forwardA(1) 以来是多余的已经是一个右值。


I can't modify the class A in any manner.

鉴于此,您无法制作 std::tuple<A> .成员(member)int是私有(private)的,因此您无法访问它以使用 int像我最初提议的构造函数。没有移动构造函数,所以你也不能使用那个。这是您的两个选择 - 显然都不可行。

此外,您甚至无法制作 std::tuple<std::shared_ptr<A>>再一次A是不可复制的,您无法获得 int成员。

游戏结束了,伙计。游戏结束。

关于c++ - 如何使用没有复制构造函数的给定类初始化元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37092470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com