Ich benutze viele Vorlagen und es ist manchmal schwierig herauszufinden, welcher Typ eigentlich alles ist. Ich wollte ein Dienstprogramm schreiben, um mir einen schönen, schönen String-Namen für jeden Typ zu geben - typid () schneidet es einfach nicht ab. Zum Beispiel, wenn ich nur ein vector<int>
habe, erzeugt gcc.4.6.4 auf meiner Box Folgendes mit typeid:
während ich im Idealfall
möchte %Vor%Ich habe etwas geschrieben, das mit jedem Typ oder Template auf Typen funktioniert, aber nur zwei Vorlagen zur Verfügung stellt:
%Vor% Wenn ich mich auf int
oder std::vector
spezialisiert habe, kann es mir helfen, die gewünschten Strings aufzubauen. Ich habe auch eine partielle Spezialisierung von simple_type_name
auf jede Base<Args...>
, um alle Argumente durchzugehen und alles entsprechend zu tun. Das funktioniert ganz gut für int
und vector<int>
und wirklich jeden beliebig komplizierten Template-Kram ... solange alle Templates Typen sind.
Wenn es hilft, sieht meine "vollständige Vorlage" Version so aus:
%Vor% Frage ist : Wie mache ich, wofür ich arbeite, sagen wir, std::array<int, 10>
? Ich weiß nicht, wie ich mit den Nicht-Typ-Parametern umgehen soll. Ist das überhaupt möglich?
Eine etwas einfachere Version von demangle
mit einigen Convenience Wrappern:
, die Sie verwenden können:
%Vor% direkt, um zu sehen, was T
tatsächlich ist.
Wenn Sie ein g ++ spezifisches Problem haben möchten:
%Vor%(Versuch / Fang hinzugefügt - Danke an Daniel Frey)