4

既存の列挙型があります

typedef enum
{
    myEnum_front = 11,
    myEnum_back = 19
} myEnumSides;

別の列挙型を作成したいのですnew_myEnumSidesが、その値をの値にマップする必要がありますmyEnumSides。したがって、私はnew_myEnumSidesの代わりにを使用しmyEnumSidesます。以下のコードはこの目的で大丈夫ですか?

typedef enum
{
    new_myEnum_front = myEnumSides::myEnum_front,
    new_myEnum_back = myEnumSides::myEnum_back
} new_myEnumSides;

それとももっと良い方法はありますか?

4

3 に答える 3

1

なぜそれを行う必要があるのか​​ 想像できません...列挙型の値の名前を変更する必要がない場合は、別の列挙型を追加せずに、最初の変数の別の変数を作成できます(これはあなたのものではないと思いますただし、この機会を指摘する必要があります):

typedef enum
{
    myEnum_front = 11,
    myEnum_back = 19
} myEnumSides, new_myEnumSides;//<-- just add the new variable here

名前を変更したい場合(あなたの場合だ思います)、演算子を使用するのではなく、単に次のように記述します。::

typedef enum
{
    myEnum_front = 11,
    myEnum_back = 19
} myEnumSides;

typedef enum
{
    new_myEnum_front = myEnum_front,
    new_myEnum_back = myEnum_back
} new_myEnumSides;

::演算子は、列挙型がクラス、構造体、または名前空間内にある場合にのみ使用する必要があります。それ以外の場合は::必要ありません。

于 2012-09-05T12:28:24.480 に答える
0

あなたがこれをやりたいと思う唯一の理由は、既存のものを拡張enumし、追加の値を持つ新しいものを作成することです。

enumコンパイル時の定数であり、実際には単なる整数であるため、継承の形式を提供しないため、特にお勧めしませんが、このようなことを行うことができます..

// internalEnums.h
myEnum_front = 11,
myEnum_back = 19

// customerEnums.h
someNewValue = 20,
someOtherNewValue = 21

// Wherever you want to define your enums
typedef enum
{
  #include "customerEnums.h"
} customerAccessible;

typedef enum
{
  #include "internalEnums.h"
  #include "customerEnums.h"
} internalUseOnly;

// Now there are two enumerations, sharing items.
customerAccessible::someNewValue // 11
customerAccessible::myEnum_front; // Doesn't exist

編集コメントによると、特に外部使用のためにヘッダーに値を保持することにより、顧客に列挙を公開できます。

于 2012-09-05T12:38:41.503 に答える