forked from rosh/MQL5Book
42 lines
1.6 KiB
MQL5
42 lines
1.6 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| RTTI.mqh |
| |
//| Copyright 2021, MetaQuotes Ltd. |
| |
//| https://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
#include "TypeName.mqh"
| |
| |
//+------------------------------------------------------------------+
| |
//| Run-Time Type Information stub (via strings) |
| |
//+------------------------------------------------------------------+
| |
template<typename T>
| |
ENUM_DATATYPE rtti(T v = (T)NULL)
| |
{
| |
static string types[] =
| |
{
| |
"null", // (0)
| |
"bool", // 0 TYPE_BOOL=1 (1)
| |
"char", // 1 TYPE_CHAR=2 (2)
| |
"uchar", // 2 TYPE_UCHAR=3 (3)
| |
"short", // 3 TYPE_SHORT=4 (4)
| |
"ushort", // 4 TYPE_USHORT=5 (5)
| |
"color", // 5 TYPE_COLOR=6 (6)
| |
"int", // 6 TYPE_INT=7 (7)
| |
"uint", // 7 TYPE_UINT=8 (8)
| |
"datetime", // 8 TYPE_DATETIME=9 (9)
| |
"long", // 9 TYPE_LONG=10 (A)
| |
"ulong", // 10 TYPE_ULONG=11 (B)
| |
"float", // 11 TYPE_FLOAT=12 (C)
| |
"double", // 12 TYPE_DOUBLE=13 (D)
| |
"string", // 13 TYPE_STRING=14 (E)
| |
};
| |
const string t = TYPENAME(T);
| |
for(int i = 0; i < ArraySize(types); ++i)
| |
{
| |
if(types[i] == t)
| |
{
| |
return (ENUM_DATATYPE)i;
| |
}
| |
}
| |
return (ENUM_DATATYPE)0;
| |
}
| |
//+------------------------------------------------------------------+
|