1. C++ / Говнокод #25369

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    #pragma once
    
    #define ENUM_DECLARE_BEGIN(enum_class, enum_value) \
    class enum_class##__enum__##enum_value : public enum_class {
    
    #define ENUM_DECLARE_END(enum_class, enum_value) \
    }; extern const enum_class##__enum__##enum_value enum_value;
    
    #define ENUM_DEFINE(enum_class, enum_value, enum_namespace) const enum_class##__enum__##enum_value enum_namespace enum_value;

    Запостил: UsernameAK, 10 Февраля 2019

    Комментарии (3) RSS

    • // enum MyBool { Yes, No, Maybe }; 
      class MyBool {
      };
      ENUM_DECLARE_BEGIN(MyBool, Yes)
      ENUM_DECLARE_END(MyBool, Yes)
      ENUM_DECLARE_BEGIN(MyBool, No)
      ENUM_DECLARE_END(MyBool, No)
      ENUM_DECLARE_BEGIN(MyBool, Maybe)
      ENUM_DECLARE_END(MyBool, Maybe)


      ENUM_DEFINE(MyBool, Yes)
      ENUM_DEFINE(MyBool, No)
      ENUM_DEFINE(MyBool, Maybe)


      И что дальше, как этим пользоваться?
      MyBool *isSomething = &No;
      if (checkSomething())
        isSomething = &Maybe;
      ...
      if (isSomething == &Yes)
        doSomething();


      Или enum_class должен наследоваться от какого-нибудь базового класса с перегруженными операторами = и ==?
      Ответить
      • Может как в джавке тупо сравнивать адреса? Собственно как ты и написал в примере.
        Ответить
    • Просто не знаю, раз уж разводится макроебля, так надо и Parse/ToString сделать, иначе зачем. Разве что это и есть, где-то за кадром...
      Ответить

    Добавить комментарий