Ich versuche Vorlagen in C++ zu verwenden, Folgendes zu tun:eine Art Austausch innerhalb eines Tupels in C++ 11
Ich habe eine Funktion wie folgt aus:
template<typename... Args>
void f1(const std::tuple<Args...>& t1);
Innerhalb dieser Funktion Ich möchte ein weiteres Tupel t2 so erstellen, dass jedes Element von t1 an derselben Stelle in t2 kopiert wird, außer für Elemente des Typs A, für die t2 ein Objekt vom Typ B erzeugen soll. Der Konstruktor von .2 B
bezieht sich auf ein Objekt vom Typ A
sowie ein zweites Argument vom Typ C&
. Eine Instanz von C
wird vor der Konvertierung erstellt und sollte als zweites Argument an den Konstruktor B
übergeben werden, wenn ein Objekt vom Typ A
gefunden wird.
Etwas Ähnliches, nur völlig verallgemeinert:
std::tuple<int, B, double, B> Convert(std::tuple<int, A, double, A> tpl, C& c)
{
return std::tuple<int, B, double, B>(
std::get<0>(tpl),
B(std::get<1>(tpl), c),
std::get<2>(tpl),
B(std::get<3>(tpl), c),
);
}
Okay, mit welchem Problem haben Sie konfrontiert? SO ist kein kostenloser Outsourcing-Standort. –
Ich ging nicht sehr weit; an anderen Stellen meines Codes musste ich Vorlagencode schreiben, der Tupel manipuliert, wie zum Beispiel das Anwenden einer Funktion, die eine Reihe von Argumenten auf ein Tupel mit Feldern derselben Typen wie die Argumente verwendet (das Gegenteil tun, also eine Reihe von Argumente in ein Tupel, ist einfach), also versuche ich immer einen Weg zu finden, ob ich ein Tupel t1 bekomme oder dass ich eine Reihe von Argumenten habe, aber ich gehe nirgendwohin ... – sunmat
Wenn dieses dumme 'C &' Ding nicht da wäre, wäre das ein relativ einfaches Stück Metaprogrammierung (vorausgesetzt, Sie haben natürlich Zugriff auf C++ 14). Aber da diese Einschränkung vorhanden ist, wird es wahnsinnig schwierig, da die Ausdrücke, die Sie verwenden, um jeden Wert zu konstruieren, nun * verschieden * sind, abhängig vom Typ dieses Wertes. Sie müssen einen Weg finden, um den Ausdruck zu normalisieren, was erfordert, ein 'Tuple'-in-einem-' Tuple' oder etwas zu erzeugen. –