Можете ли вы сослаться на именованное перечисление, как если бы оно было анонимным в D? - PullRequest
4 голосов
/ 19 августа 2009

Я делаю D-мост к библиотеке C, и он придумал код C, использующий перечисления typedef, которые он называет константой, но может назвать его для аргументов функции и тому подобного. Пример:

enum someLongNameThatTheCLibraryUses
{
    A,
    B,
}

В настоящее время я должен ссылаться на это так:

someLongNameThatTheCLibraryUses.A;

Но я бы предпочел:

A;

Я мог бы сделать это:

alias someLongNameThatTheCLibraryUses a;
a.A;

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

Есть ли способ сделать это?

1 Ответ

5 голосов
/ 19 августа 2009

Если вам нужна безопасность типов с анонимными перечислениями, вы можете создать новый отдельный тип, используя typedef, и использовать его как базовый тип анонимного перечисления. Пример:

typedef int A;
enum : A
{
    a1,
    a2,
    a3
}

typedef int X;
enum : X
{
    x1,
    x2,
    x3
}

void main()
{
    A a;
    X x;
    x = a;  // Error: cannot implicitly convert expression (a) of type A to X
}
...