4

したがって、これはコードです:

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ため、basic への後方参照では使用できません。enum DigitsThatILikeToUse

私の解決策は、次のように数値の明示的な位置を記述することです。

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

しかし!この新しい を繰り返すことはできませんenum DigitsThatILikeToUseInEdition

subEnuminを作成して、enumそれを繰り返し処理したいと考えています。出来ますか?

私の最善のアイデアは、次のようなものを使用することです:

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

しかし、おそらく解決策はありますか?

4

1 に答える 1

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>
}
于 2012-11-07T11:25:16.697 に答える