Можете ли вы сослаться на именованное перечисление, как если бы оно было анонимным в D?

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

enum someLongNameThatTheCLibraryUses
{
    A,
    B,
}

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

someLongNameThatTheCLibraryUses.A;

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

A;

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

alias someLongNameThatTheCLibraryUses a;
a.A;

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

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

1 ответ

Решение

Если вам нужна безопасность типов с анонимными перечислениями, вы можете создать новый отдельный тип, используя 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
}
Другие вопросы по тегам