Cтили оформления версионных структур

Тема в разделе "WASM.HEAP", создана пользователем wsd, 1 окт 2007.

  1. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Задалбался с M$ стилем оформления версионности(и р3 и р0).....
    Они делают типа так:
    Код (Text):
    1. #if (build==98)
    2.     typedef _core
    3.         {
    4.          int a1;
    5.          }CORE,*PCORE;
    6. #endif
    7. #if (build==2000)
    8.     typedef _core
    9.         {
    10.          int a1;
    11.          int a2;
    12.          }CORE,*PCORE;
    13. #endif
    14. #if (build==XP)
    15.     typedef _core
    16.         {
    17.          int a1;
    18.          int a2;
    19.          int a3;
    20.          }CORE,*PCORE;
    21. #endif
    а чтобы своя прога была универсальной т.е.
    в зависимости от версии использовала или что-то
    не использовала приходится руками эти творения
    конвертировать в

    Код (Text):
    1. typedef struct _core98
    2.         {
    3.          int a1;
    4.          }_CORE98,*PCORE98;
    5. typedef struct _core2000
    6.         {
    7.          int a1;
    8.          int a2;
    9.          }_CORE2000,*PCORE2000;
    10. typedef truct _corexp
    11.         {
    12.          int a1;
    13.          int a2;
    14.          int a3;
    15.          }_COREXP,*PCOREXP;
    16. #if (build==98)
    17.     typedef _core98 CORE,*PCORE;
    18. #endif
    19. #if (build==2000)
    20.     typedef _core2000 CORE,*PCORE;
    21. #endif
    22. #if (build==__XP__)
    23.     typedef _corexp CORE,*PCORE;
    24. #endif
    Видит ли кто в моём способе какие минусы??
    Кроме плюса - иметь возможность в программе все варианты версий структур
    и динамически ими пользоваться...
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Тогда уж
    Код (Text):
    1. struct core {
    2.   int a1;
    3. };
    4.  
    5. struct core2k: core {
    6.   int a2;
    7. };
    8.  
    9. struct corexp: core2k {
    10.   int a3;
    11. };
    Если там действительно идёт расширение структур. А если замена — тогда сложнее, но всё равно через наследование проще.
     
  3. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    IceStudent
    Да Ваш вариант тоже интересный!
    Но он под срр ,а не под чистый ся, т.е. менее универсальный в смысле
    безтюнинговых подключений в чистый ся проект.
    А так сам тоже люблю ООП;)
    Спасибо!
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Чистый си? Тоже можно (по стопам ms):
    Код (Text):
    1. struct core {};
    2. struct corexp {
    3.   core head;
    4.   int a2;
    5. };
    6.  
    7. struct core2k3 {
    8.   core head;
    9.   int a2;
    10.   int a3;
    11. };
     
  5. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    IceStudent
    Вот уж лучше Вы своими стопами - они у Вас заметно лучше!
    А по ихнем стопам получаются семантические коллизии....
    т.е. получается надо будет вносить изменения в основной
    начальный вариант доступа к CORE если билд выше 98 т.к.
    появилось дополнительное промежуточное поле(типа head)...
    А наши первые варианты(мой(с) и Ваш(срр)) пристёгиваются
    к ранее написанной программе прозрачно - без вноса изменений;)
    Спасибо!