Beim Entwickeln von Vorlagenklassen zum Parsen von Daten kann es vorkommen, dass bei Parsingfehlern informative Fehlermeldungen generiert werden müssen. Um umfassende Fehlermeldungen bereitzustellen, müssen Sie möglicherweise den Namen des Typs kennen, in den die Vorlagenfunktion konvertieren möchte.
Der unten bereitgestellte Codeausschnitt zeigt den Originalcode, der versucht, den Typnamen mithilfe von Spezialisierungen abzurufen für Zeichenfolgen:
template<typename T> T GetValue(const std::wstring &section, const std::wstring &key) { std::map<std::wstring, std::wstring>::iterator it = map[section].find(key); if(it == map[section].end()) throw ItemDoesNotExist(file, section, key) else { try{return boost::lexical_cast<T>(it->second);} //needs to get the name from T somehow catch(...)throw ParseError(file, section, key, it->second, TypeName(T)); } }
Eine alternative Lösung beinhaltet die Verwendung von:
typeid(T).name()
Die Funktion typeid(T) gibt eine Instanz von std::type_info zurück, die Zugriff auf den verstümmelten Typnamen bietet von T. Die name()-Methode von std::type_info gibt den entzerrten Typnamen zurück.
Wenn Sie diese Lösung in Ihren Code integrieren, können Sie den Catch-Block wie folgt ändern:
catch(...)throw ParseError(file, section, key, it->second, typeid(T).name());
Dieser Ansatz bietet eine flexiblere und effizientere Möglichkeit, den Typnamen abzurufen, ohne dass explizite Spezialisierungen erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie rufe ich Typnamen in C-Vorlagen für informative Fehlermeldungen ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!