【问题标题】:Enum Customization: Is it possible to create subEnum?枚举自定义:是否可以创建子枚举?
【发布时间】:2012-11-06 11:54:56
【问题描述】:

所以,这是代码:

typedef enum{
    zero, one, two, three, four, five, six, seven, eight, nine
}Digits;

typedef enum{
    zero, one, two, nine 
}DigitsThatILikeToUse;

问题: 如果我定义函数:

void takeMyFavoriteDigits(DigitsThatILikeToUse favorite); (C)

-|+(void) takeMyFavoriteDigits:(DigitsThatILikeToUse)favorite; (Objective-C)

我不能将它与基本enum Digits 的反向引用一起使用,因为我在enum DigitsThatILikeToUse 中的订单不同。

我的解决方案是这样写数字的明确位置:

typedef enum{
    zero = 0, one = 1, two = 2, nine = 9 
}DigitsThatILikeToUseInEdition;

但是!我无法遍历这个新的enum DigitsThatILikeToUseInEdition

我想在enum 中创建一个subEnum 并遍历它。有可能吗?

我最好的想法是使用这样的东西:

typedef enum{
        beginIteratorDigitsThatILike, zero, one, two, nine, endIteratorDigitsThatILike, three, four, five, six, seven, eight
    }Digits;

但也许有什么解决办法?

【问题讨论】:

  • 请为您使用的语言添加标签。
  • 这是三种不同的语言,C++ 比 C 或 Objective-C 有更多的枚举特性。请选择一种语言。
  • 好的,objective-c,但我在c上写代码
  • 如果你用 C 写代码,然后加上 C 标签,而不是 Objective-C 和 C++ - Objective-C 是 C 的超集,你可以用它做一些你可以做的事情' t 用纯 C 语言做,所以你不想要 Objective-C 的答案。 C++ 甚至不是 C 的严格超集,如果你只有 C,C++ 特定的答案很可能对你毫无用处。
  • 你想完成什么?看起来 DigitsThatILikeToUse 应该是一个数组。

标签: objective-c c enums customization


【解决方案1】:

因为(大多数情况下)没有问题不能通过添加更多的间接级别来解决:

typedef enum enumDigits {
  digitsNone = -1, 
  digitsZero, digitsOne, digitsTwo, digitsThree, digitsFour, digitsFive, digitsSix, digitsSeven, digitsEight, digitsNine, 
  digitsMax
} Digits_t;

typedef enum enumDigitsIndexIdLikeToUse {
  digitsIndexIdLikeToUseNone = -1, 
  digitsIndexIdLikeToUseZero, digitsIndexIdLikeToUseOne, digitsIndexIdLikeToUseTwo, digitsIndexIdLikeToUseThree, digitsIndexIdLikeToUseFour, 
  digitsIndexIdLikeToUseMax
} DigitsIndexIdLikeToUse_t;

const Digits_t digitsIdLikeToUse[digitsIndexIdLikeToUseMax] = {
  digitsZero, digitsOne, digitsTwo, digitsNine
}

假设您想使用至少 1 个 didigt,您可以这样做:

Digits_t digitIdLikeToUse = digitNone;

...

for (DigitsIndexIdLikeToUse_t digitIndexIdLikeToUse = digitsIndexIdLikeToUseZero, digit = digitsIdLikeToUse[digitIndexIdLikeToUse];
  digitsIndexIdLikeToUse < digitsIndexIdLikeToUseMax;
  ++ digitsIndexIdLikeToUse)
{
  <do something with digitIdLikeToUse>
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多