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;}
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")
Rufen Sie innerhalb der Funktion „GetValue“ den Typnamen ab, indem Sie Folgendes verwenden:
const wchar_t *typeName = GetTypeName<T>();
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()
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!