ich möchte ein std::variant mit einem std::tuple initialisieren so das
die Typen in dem Tuple Values im variant werden - ist das eine Art
unpacking?
C++17
1
#include<variant>
2
#include<tuple>
3
#include<type_traits>
4
5
usingV0=std::variant<int,float,char>;
6
usingV1=std::variant<int,float,char>;
7
usingT=std::tuple<int,float,char>;
8
usingV2=std::variant<T>;
9
10
static_assert(std::is_same<V0,V1>::value,"not the same");// logischerweise OK
11
static_assert(std::is_same<V0,V2>::value,"not the same");// ist ja auch nicht <int,float,char> sondern T
ich möchte das V2 is_same is zu V0 und V1 - geht das irgendwie?
Niklas G. schrieb:> So?
Ich weiß nicht, ob es dem TO hilft, aber mir hilft es. Ich habe eben
versucht es über template template parameter zu lösen und bin damit
gescheitert. Dabei habe ich mal wieder festgestellt, dass sie nie
helfen, wenn ich sie für die logische Wahl halte.
Ja genau so, Niklas G. - wie immer sehr schnell am Start :)
ich dachte mich schon das man es so machen muss - aber hätte mich jetzt
auch nicht gewundert wenn es einen noch viel kürzeren Weg gibt
Danke
mh schrieb:> Dabei habe ich mal wieder festgestellt, dass sie nie> helfen, wenn ich sie für die logische Wahl halte.
IMO braucht man die eh nicht, und es gibt bessere Alternativen welche
zwar etwas länger, dafür aber flexibler und weniger hirnverdrehend sind.
cppbert schrieb:> Ja genau so, Niklas G. - wie immer sehr schnell am Start :)
Gern ;-)
Niklas G. schrieb:> IMO braucht man die eh nicht, und es gibt bessere Alternativen welche> zwar etwas länger, dafür aber flexibler und weniger hirnverdrehend sind.
Ich hoffe trotzdem hin und wieder, dass es eine gut Anwendung dafür
gibt.
Meine Variante
1
template<template<typename...Args>typename>
2
structGetVariantI{
3
usingtype=std::variant<Args...>;
4
};
wäre immerhin zwei ganze Zeile kürzer als deine! Wäre es nicht toll,
wenn das so funktionieren würde? Ok es ist schlechter lesbar und bietet
auch sonst keinen wirklichen Vorteil ...
mh schrieb:> Meine Variante
Das ist aber ziemlich genau das Gegenteil von dem, was
template-templates können!
Das wäre anzuwenden, wenn die Parameter schon "bekannt" sind, aber das
"variant" an sich variabel wäre. Also "Get<std::variant, int, float,
char>" zu "std::variant<int, float, char>"