Могу ли я поместить оператор приведения в перечисление, чтобы преобразовать его в другой тип? - PullRequest
3 голосов
/ 23 августа 2011

Например, если у меня есть:

enum SomeEnum { One, Two, Three };

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

Я знаю, что вы можете сделать это с классами, но я не был уверен, что вы могли бы сделать это с перечислениями.

Ответы [ 3 ]

3 голосов
/ 23 августа 2011

Перечисления могут быть преобразованы в целое число, для этого даже не требуется приведение.Однако нет способа автоматически преобразовать его в строку.

Если вы хотите создать строковый массив параллельно, вы можете легко проиндексировать его с помощью перечисления;единственная проблема заключается в том, что он может выйти из синхронизации, если вы не будете осторожны в изменении обоих параметров при внесении изменений.

char * SomeEnumNames[] = { "One", "Two", "Three" };

cout << SomeEnumNames[One] << endl; // should output "One"
0 голосов
/ 23 августа 2011

Да, вы можете привести перечисление к целочисленному типу, например так:

int someInt = (int)someEnumValue;

По умолчанию перечисление начнется с 0 и будет увеличиваться для каждого значения, если вы специально не установите целочисленное значение для каждого из них.перечисление.Вы можете назначить целочисленные значения перечислениям следующим образом:

public enum SomeType
{
   FirstValue = 1,
   SecondValue = 3,
   ThirdValue = 5
}
0 голосов
/ 23 августа 2011

Нет, это невозможно, вы можете сделать это только с классами. Вам нужно написать функцию для преобразования значения перечисления в строку или что-то еще.

Обратите внимание, что значения перечисления могут быть явно приведены к int s, хотя сами по себе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...