Heim > Backend-Entwicklung > C++ > Wie erhalte ich einen Typnamen in C-Vorlagen?

Wie erhalte ich einen Typnamen in C-Vorlagen?

DDD
Freigeben: 2024-11-15 08:58:02
Original
621 Leute haben es durchsucht

How to Get Type Name in C   Templates?

Typnamen in C-Vorlagen abrufen

Bei der C-Vorlagenprogrammierung kann es für die Fehlerbehandlung von entscheidender Bedeutung sein, den Namen des Typs zu erhalten, in den konvertiert wird . Stellen Sie sich eine Vorlagenklasse vor, die Datendateien analysiert, wobei die meisten Analysefehler auf Datendateifehler zurückzuführen sind. Um benutzerfreundliche Fehlermeldungen bereitzustellen, ist die Identifizierung des erwarteten Datentyps unerlässlich.

Die generische GetValue-Funktion ruft Werte aus einer Datenkarte basierend auf Abschnitts- und Schlüsseleingaben ab. Wenn der erwartete Wert nicht in den gewünschten Typ konvertiert werden kann, wird eine Ausnahme ausgelöst. Es kann jedoch eine Herausforderung sein, den erwarteten Typnamen zu ermitteln, der in die Fehlermeldung aufgenommen werden soll.

Lösung zur Kompilierungszeit

Eine elegante Lösung zur Kompilierungszeit kann mithilfe von Typ erreicht werden Selbstbeobachtung und vordefinierte Makros. Erstellen Sie eine Header-Datei (types.h), die eine Funktionsvorlage „GetTypeName“ definiert.

template<typename T> const wchar_t *GetTypeName();

#define DEFINE_TYPE_NAME(type, name) \
    template<>const wchar_t *GetTypeName<type>(){return name;}
Nach dem Login kopieren

Verwenden Sie das DEFINE_TYPE_NAME-Makro in .cpp-Dateien, um die Typnamen für Typen zu definieren, die beim Analyseprozess der Datendatei gefunden werden.

DEFINE_TYPE_NAME(int, L"int")
DEFINE_TYPE_NAME(float, L"float")
DEFINE_TYPE_NAME(std::string, L"std::string")
Nach dem Login kopieren

Rufen Sie innerhalb der Funktion „GetValue“ den Typnamen ab, indem Sie Folgendes verwenden:

const wchar_t *typeName = GetTypeName<T>();
Nach dem Login kopieren

Dieser Ansatz stellt sicher, dass ein Linkerfehler entsteht, wenn ein undefinierter Typ auftritt, der das Hinzufügen der erforderlichen Typdefinition veranlasst .

Alternative Lösung mit Runtime Type Identification (RTTI)

Eine Laufzeitlösung kann mit RTTI erhalten werden:

std::type_info(T).name()
Nach dem Login kopieren

Diese Lösung verursacht Laufzeitaufwand und ist daher für häufig aufgerufene Funktionen weniger wünschenswert.

Das obige ist der detaillierte Inhalt vonWie erhalte ich einen Typnamen in C-Vorlagen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage