Возможный добавить другой объект к существующему перечислимому типу?

Интересно, возможно ли добавить/добавить другой объект к существующему перечислимому типу (часть платформы)?

Что-то вроде этого: Мы имеем enum ввести

  typedef enum {  
    UIModalTransitionStyleCoverVertical = 0,  
    UIModalTransitionStyleFlipHorizontal,
    UIModalTransitionStyleCrossDissolve,
    UIModalTransitionStylePartialCurl,
 } UIModalTransitionStyle;  

Теперь я хочу добавить или добавить к этому набору объект как UIModalTransitionStyleCoverVerticalFlipped. Что-то вроде этого может быть выполнено?

20
задан Josh Caswell 3 October 2011 в 07:29
поделиться

1 ответ

Для этого вам нужно изменить исходное определение типа, включив в него новое значение:

typedef enum {  
    UIModalTransitionStyleCoverVertical = 0,  
    UIModalTransitionStyleFlipHorizontal,
    UIModalTransitionStyleCrossDissolve,
    UIModalTransitionStylePartialCurl,
    UIModalTransitionStyleCoverVerticalFlipped
} UIModalTransitionStyle;

В противном случае вы можете рискнуть, что оно не работает, и определить его отдельно:

typedef enum {  
    UIModalTransitionStyleCoverVertical = 0,  
    UIModalTransitionStyleFlipHorizontal,
    UIModalTransitionStyleCrossDissolve,
    UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;

typedef enum { 
    UIModalTransitionStyleCoverVerticalFlipped =
        UIModalTransitionStylePartialCurl + 1
} ExtendedUIModalTransitionStyle;

Переменная, которая может содержать исходное перечисление, обычно также отлично работает, когда / если вы также присваиваете новое значение (в типичном случае это будет просто int ) - но это не гарантировано. По крайней мере, теоретически реализация может / могла бы назначить достаточно битов для хранения этого перечисления, поэтому добавление дополнительных значений таким образом не сработает. Он также может выполнять проверку диапазона, поэтому присвоение любого значения вне диапазона не допускается. Ни то, ни другое не является обычным явлением, поэтому с практической точки зрения это, вероятно, не проблема, но с теоретической точки зрения ничто на самом деле не гарантирует, что такой код будет работать.

8
ответ дан 30 November 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: