c++ : konvertieren Sie vector-Tupel
Wie kann ich umwandeln std::vector std::tuple ?
Ich habe
class T { };
int cnt = 3;
vector<T*> tv;
for (int i = 0; i < cnt; ++i) {
tv.push_back(new T());
}
Ich will
auto tp = std::tie(*tv[0], *tv[1], *tv[2]);
Wie kann ich diese tp ?
Wenn cnt ist groß genug, ich kann nicht schreiben, diese tp manuell.
std::vector<
ConvConnection<
decltype(inputLayer),
decltype(*C1[0]),
decltype(*Conn1Opt[0]),
RandomInitialization<arma::mat>,
arma::mat
>* > Conn1(6);
for (size_t i = 0; i < 6; ++i) {
Conn1.push_back(new ConvConnection<
decltype(inputLayer),
decltype(*C1[0]),
decltype(*Conn1Opt[0]),
RandomInitialization<arma::mat>,
arma::mat
>(inputLayer, *C1[i], *Conn1Opt[i], 5, 5));
}
Dies ist der code. Hier ist nur 6, aber ich brauche auch ein Vektor, dessen Größe über 100. Ich brauche zum konvertieren dieser Vektor auf ein Tupel.
- Wenn es zu groß oder zu mühsam zu schreiben, manuell, schreiben Sie ein weiteres Programm, das es erzeugt. Wenn Sie möchten, um zu bestimmen, die Tupel Größe zur Laufzeit können Sie nicht.
- Warum brauchen Sie ein Tupel? Würde nicht
std::array<T*,MAX>
Arbeit? - Einen off-topic-Fehler: Man sollte wirklich besser eine variable/Klasse Namen. Es gibt keinen Grund
cnt
kann nicht geschrieben werden alscount
. Was ist einConvConnection
?Conn1Opt
? Im Jahr 2015, Ihre source-Dateien werden immer noch auf Ihrer Festplatte mit ein paar zusätzliche Zeichen in Ihnen, und andere Entwickler, die sich Ihr code wird es dir danken später 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen, Sie können nicht konvertieren eine
vector
zu einemtuple
. Allerdings, wenn alles, was Sie versuchen zu tun ist stellen Sie die Tupel<f(0), f(1), ..., f(N-1)>
für einigeN
ist ein konstanter Ausdruck ist, dann ist das machbar mit der index-Sequenz trick:Die wir nutzen können wie:
Für Ihren speziellen Anwendungsfall, das wäre:
make_tuple(Is...)
mitmake_tuple(new T(Is)...)
.Wenn Sie C++14, Sie können es so machen:
Dank " auto-Abzug, das ist ok. In C++11, ohne automatischen Abzug, schreiben Sie die return-Typen trailing
decltype
. Sie haben auch, um Ihre eigenenindex_sequence
.Kann man einfach nicht. Da der Vektor Größe ist zur Laufzeit bekannt, aber
tuple
Art (auch seiner Größe) muss zur Kompilierzeit bekannt ist.