Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef ENUM_FACTORY_H__
- #define ENUM_FACTORY_H__
- /*
- Factory used example:
- someEnum.h:
- #include "enum_factory.h"
- #define SOME_ENUM(XX) \
- XX(FirstValue,) \
- XX(SecondValue,) \
- XX(SomeOtherValue,=50) \
- XX(OneMoreValue,=100)
- DECLARE_ENUM(SomeEnum,SOME_ENUM)
- someEnum.cpp:
- #include "someEnum.h"
- DEFINE_ENUM(SomeEnum,SOME_ENUM)
- */
- #include <string.h>
- // expansion macro for enum value definition
- #define ENUM_VALUE(name, assign) name assign,
- // expansion macro for enum to string conversion
- #define ENUM_CASE(name, assign) \
- case name: \
- return #name;
- // expansion macro for string to enum conversion
- #define ENUM_STRCMP(name, assign) \
- if (!strcmp(str, #name)) \
- return name;
- /// declare the access function and define enum values
- #define DECLARE_ENUM(EnumType, ENUM_DEF) \
- enum EnumType { ENUM_DEF(ENUM_VALUE) }; \
- const char *GetString(EnumType dummy); \
- EnumType Get##EnumType##Value(const char *string);
- /// define the access function names
- #define DEFINE_ENUM(EnumType, ENUM_DEF) \
- const char *GetString(EnumType value) { \
- switch (value) { \
- ENUM_DEF(ENUM_CASE) \
- default: \
- return ""; /* handle input error */ \
- } \
- } \
- EnumType Get##EnumType##Value(const char *str) { \
- ENUM_DEF(ENUM_STRCMP) \
- return (EnumType)0; /* handle input error */ \
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement