_variant_t in std::variant wandeln mit varadic template
-
@th69 sagte in _variant_t in std::variant wandeln mit varadic template:
template <typename ...Args>
struct converter<std::variant<Args...>>ist ja eine Spezialisierung (obwohl es selbst wiederum ein Template ist).
Achso die Deklaration komm noch extra dazu, das ist keine Änderung des bestehenden Codes.
Der Teil fehlt aber auch bei der json Implementierung. Sehe ich das richtig?
-
@booster Nein, er fehlt nicht. In der JSON Implementierung ist die Deklaration des Primaertemplates eben auch eine Definition:
template <std::size_t N> struct variant_switch { ...
-
@Columbo: Wieso jetzt
variant_switch
? Bei der JSON-Implementierung geht es doch um den Typadl_serializer
, s.a. adl_serializer.hpp:template<typename, typename> struct adl_serializer
-
@th69 Ich bin einfach seinem Link vom OP gefolgt.
-
@columbo sagte in _variant_t in std::variant wandeln mit varadic template:
@booster Nein, er fehlt nicht. In der JSON Implementierung ist die Deklaration des Primaertemplates eben auch eine Definition
template <std::size_t N>
struct variant_switchhabe ich doch auch drin. Ich steh auf dem Schlauch.
mir gehts da wie Th69
adl_serializer habe ich in converter umbenannt. Die restlichen bezeichner habe ich belassen.
-
Ich auch, aber es geht ja um den 'variadic template'-Typ:
namespace nlohmann { template <typename ...Args> struct adl_serializer<std::variant<Args...>> { // ... } }
-
genau und diesen - adl_serializer - habe ich lediglich in converter umbenannt
Und in diesem json beispiel fehlt doch das
template <typename...> struct adl_serializer;
ebenfalls.
-
In dem Beispiel wird aber <nlohmann/json.hpp> eingebunden, welches wiederum dann <nlohmann/adl_serializer.hpp> einbindet.
-
-
Du hattes noch auf eine elegantere Lösung hingedeutet. Kannst du dazu noch was sagen?