Heim >Backend-Entwicklung >C++ >Wie rufe ich Typnamen in C-Vorlagen für informative Fehlermeldungen ab?

Wie rufe ich Typnamen in C-Vorlagen für informative Fehlermeldungen ab?

DDD
DDDOriginal
2024-11-16 15:18:03805Durchsuche

How to Retrieve Type Names in C   Templates for Informative Error Messages?

Typnamen in C-Vorlagen abrufen

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 &amp;section, const std::wstring &amp;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!

Stellungnahme:
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