@@ -1288,11 +1288,12 @@ namespace SharedUtil
1288
1288
//
1289
1289
enum eDummy { };
1290
1290
1291
+ template <class T >
1291
1292
struct CEnumInfo
1292
1293
{
1293
1294
struct SEnumItem
1294
1295
{
1295
- int iValue;
1296
+ T iValue;
1296
1297
const char * szName;
1297
1298
};
1298
1299
@@ -1346,16 +1347,17 @@ namespace SharedUtil
1346
1347
};
1347
1348
1348
1349
1349
- #define DECLARE_ENUM ( T ) \
1350
- CEnumInfo* GetEnumInfo ( const T& ); \
1350
+ #define DECLARE_ENUM2 ( T, U ) \
1351
+ CEnumInfo<U>* GetEnumInfo ( const T& ); \
1351
1352
inline const SString& EnumToString ( const T& value ) { return GetEnumInfo ( *(T*)0 )->FindName ( (eDummy)value ); }\
1352
1353
inline bool StringToEnum ( const SString& strName, T& outResult ) { return GetEnumInfo ( *(T*)0 )->FindValue ( strName, (eDummy&)outResult ); }\
1353
1354
inline const SString& GetEnumTypeName ( const T& ) { return GetEnumInfo ( *(T*)0 )->GetTypeName (); }\
1354
1355
inline bool EnumValueValid ( const T& value ) { return GetEnumInfo ( *(T*)0 )->ValueValid ( (eDummy)value ); }\
1355
1356
1356
- #define IMPLEMENT_ENUM_BEGIN ( cls ) \
1357
- CEnumInfo* GetEnumInfo ( const cls & ) \
1357
+ #define IMPLEMENT_ENUM_BEGIN2 ( T, U ) \
1358
+ CEnumInfo<U> * GetEnumInfo ( const T & ) \
1358
1359
{ \
1360
+ using CEnumInfo = CEnumInfo<U>; \
1359
1361
static const CEnumInfo::SEnumItem items[] = {
1360
1362
1361
1363
#define IMPLEMENT_ENUM_END (name ) \
@@ -1370,6 +1372,16 @@ namespace SharedUtil
1370
1372
#define ADD_ENUM (value,name ) {value, name},
1371
1373
#define ADD_ENUM1 (value ) {value, #value},
1372
1374
1375
+ // enum
1376
+ #define DECLARE_ENUM (T ) DECLARE_ENUM2(T, int )
1377
+ #define IMPLEMENT_ENUM_BEGIN (T ) IMPLEMENT_ENUM_BEGIN2(T, int )
1378
+
1379
+ // enum class
1380
+ #define DECLARE_ENUM_CLASS (T ) DECLARE_ENUM2(T, T)
1381
+ #define IMPLEMENT_ENUM_CLASS_BEGIN (T ) IMPLEMENT_ENUM_BEGIN2(T, T)
1382
+ #define IMPLEMENT_ENUM_CLASS_END (name ) IMPLEMENT_ENUM_END(name)
1383
+ #define IMPLEMENT_ENUM_CLASS_END_DEFAULTS (name,defvalue,defname ) IMPLEMENT_ENUM_END_DEFAULTS(name,defvalue,defname)
1384
+
1373
1385
1374
1386
//
1375
1387
// Fast wildcard matching
0 commit comments