__delphirtti System::Typinfo::GetEnumName

来源:互联网 发布:大水牛软件博客 编辑:程序博客网 时间:2024/05/23 14:06

运行期获取

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    PTypeInfo info;
    info = __delphirtti(TWindowState);
    Caption = AnsiString(info->Name);

    String kindName;

    kindName = System::Typinfo::GetEnumName(__delphirtti(TTypeKind),
        info->Kind);
    Caption = kindName;

}

http://docwiki.embarcadero.com/CodeExamples/XE5/en/TypInfoGetEnumName_%28C%2B%2B%29

#include <vcl.h>#include <windows.h> #pragma hdrstop#pragma argsused#include <vector>#include <tchar.h>#include <stdio.h>#include <conio.h>#include <System.Generics.Collections.hpp> /* A template class */template<class T>class TGenericClass : public std::vector<T> {public:void PrintTypeInfo();}; template<class T>void TGenericClass<T>::PrintTypeInfo() {PTypeInfo Info = new TTypeInfo;PTypeData Data;String SubName, KindName;char tmpBuffer[256]; memset(tmpBuffer, 0, 256); /* Get type info for the "yet unknown type". */Info = __delphirtti(T); /* There is no RTTI attached for some types, such as Records. */if (Info != NULL) {strcpy(tmpBuffer, AnsiString(Info->Name).c_str());printf("Type name: %s\n", tmpBuffer); /* Find out the name of an enum item from its ordinal value. */KindName = System::Typinfo::GetEnumName(__delphirtti(TTypeKind),Info->Kind);strcpy(tmpBuffer, AnsiString(KindName).c_str());printf("Type Kind: %s\n", tmpBuffer);memset(tmpBuffer, 0, 256); Data = GetTypeData(Info); if (Info->Kind == tkInteger) { /* In the case of Integer, here is the actual subtype name */SubName = System::Typinfo::GetEnumName(__delphirtti(TOrdType),Data->OrdType);strcpy(tmpBuffer, AnsiString(SubName).c_str());printf("Integer kind: %s\n", tmpBuffer);}if (Info->Kind == tkFloat) { /* In the case of Float, here is the actual subtype name. */SubName = System::Typinfo::GetEnumName(__delphirtti(TFloatType),Data->FloatType);strcpy(tmpBuffer, AnsiString(SubName).c_str());printf("Float kind: %s\n", tmpBuffer);} if (Info->Kind == tkDynArray + 1) { /* Check out the element size. */printf("Element size: %d\n", Data->elSize);}printf("Size of type: %d\n\n", sizeof(T));}} int _tmain(int argc, _TCHAR* argv[]) {TGenericClass<int> *IntClass = new TGenericClass<int>;IntClass->PrintTypeInfo(); TGenericClass<double> *DoubleClass = new TGenericClass<double>;DoubleClass->PrintTypeInfo(); TGenericClass<String> *StringClass = new TGenericClass<String>;StringClass->PrintTypeInfo(); /* Read a character to see the results. */getch();return 0;}

0 0