Ich habe eine Anforderung, wo Tupel wie folgt initialisiert werden muss. Wie erstelle ich ein Tupel, das das Objekt der Klasse A enthält?Wie initialisiert man ein Tupel mit einer gegebenen Klasse ohne Kopierkonstruktor
#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))));
}
Ich kann die Klasse A in keiner Weise ändern.
Was versuchen Sie _actually_ und was sind Ihre _actual_ Einschränkungen? Ich meine, wir können es wahrscheinlich in diesem Fall von Ihrem Code herleiten/erraten, aber Sie sollten _words_ verwenden, um es zu erklären, so dass diese Frage durchsuchbar und wiederverwendbar und klar ist. –
'std :: forward' funktioniert nicht so, wie Sie denken, dass es funktioniert. In Ihrem Fall brauchen Sie nirgendwo 'std :: forward'. – bolov
Sie versuchen auch, in 'createTuple' einen Lvalue-Verweis auf ein temporäres Objekt zurückzugeben. I – bolov