Member Tuple initialisieren
-
Hallo Leute,
ich habe eine Klasse, die als Member ein std::tuple von mehreren Elementen hat und moechte alle Elemente des Tuples mit dem selben Set von Argumenten initialisieren. Geht das irgendwie?
Beispiel:
struct X { X() : t(... initialisiere alle mit (1, 2, 3) ...) {} std::tuple<Foo, Bar, Baz> t; };Gruesse,
Der Kellerautomat
-
std::make_tuple(...) ?
-
Skym0sh0 schrieb:
std::make_tuple(...) ?
Erfordert, dass die Typen Copyable/Movable sind.
-
Dann solltest du etwas konkreter werden oO
-
std::piecwise_construct_t gibts afaik nur für std::pair.
-
Kannste deine Klassen nicht
std::initializer_listo.ä. nehmen lassen?Ansonsten wird
Erfordert, dass die Typen Copyable/Movable sind.
nicht zu umgehen sein.
-
Arcoth schrieb:
Kannste deine Klassen nicht
std::initializer_listo.ä. nehmen lassen?Nein, da die Argumente auch unterschiedlichen Typs sein werden. Und ueberhaupt muesste ich dazu jetzt zig Klassen umschreiben.
Vielleicht kann ich zumindest Movability bekommen. Wie wuerde ich das denn mit make_tuple machen?
-
Nein, da die Argumente auch unterschiedlichen Typs sein werden. Und ueberhaupt muesste ich dazu jetzt zig Klassen umschreiben.
Das klingt doof. Ich würde dir da echt raten auf
tuplezu verzichten und was eigenes zu basteln.Falls du movability bekommst könntest du sowas basteln:
struct X { X() : X(std::make_index_sequence<std::tuple_size<decltype(t)>{}>()) {} std::tuple<Foo, Bar, Baz> t; private: template <std::size_t... indices> X(std::index_sequence<indices...>) : t(std::tuple_element_t<indices, decltype(t)>(1, 2, 3)...) {} };Demo.
-
Klappt, danke.
-
Frage zum Verständnis:
Wieso kann man[quote="Arcoth"]
... <std::tuple_size<decltype(t)>{}schreiben statt
std::tuple_size<decltype(t)>::value?
-
Weil
std::integral_constanteinenconstexpr operator value_typehat