Сопоставить одно перечисление с другим перечислением

Существует существующий enum

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;

Или есть лучший способ?

3

Решение

Я не могу себе представить Зачем вам нужно сделать это … Если вам не нужно переименовать значения перечисления, вы можете просто сделать еще одну переменную из первого, не добавляя другое перечисление (я считаю, что это не ваш случай, но все же должны указать на эту возможность):

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;

:: Оператор должен использоваться, только если enum находится внутри класса, структуры или пространства имен, в противном случае нет :: нужно.

1

Другие решения

Единственная причина, по которой я могу представить, что ты хочешь это сделать, это простираться существующий 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

РЕДАКТИРОВАТЬ Согласно вашему комментарию, вы можете предоставить перечисления клиенту, сохранив значения в заголовке специально для внешнего использования.

0