Heim > Backend-Entwicklung > C++ > Hauptteil

Wie erhalte ich einen Typnamen in C-Vorlagen?

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

How to Get Type Name in C++ Templates?

Getting Type Name in C++ Templates

In C++ template programming, obtaining the name of the type being converted to can be crucial for error handling. Consider a template class parsing data files, where most parse errors originate from data file errors. To provide user-friendly error messages, identifying the expected data type is essential.

The generic GetValue function retrieves values from a data map based on section and key inputs. When the expected value cannot be converted to the desired type, an exception is thrown. However, determining the expected type name to include in the error message can be challenging.

Compile-Time Solution

An elegant compile-time solution can be achieved using type introspection and predefined macros. Create a header file (types.h) defining a function template GetTypeName.

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

Use the DEFINE_TYPE_NAME macro in .cpp files to define the type names for types encountered in the data file parsing process.

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

Within the GetValue function, retrieve the type name using:

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

This approach ensures the creation of a linker error if an undefined type is encountered, prompting the addition of the necessary type definition.

Alternative Solution Using Runtime Type Identification (RTTI)

A runtime solution can be obtained using RTTI:

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

However, this solution incurs runtime overhead, making it less desirable for frequently called functions.

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