2009-08-19 4 views
4

Je fais un pont D vers une bibliothèque C, et cela a donné le code C en utilisant typedef'd enums auquel il se réfère comme une constante, mais je peux le nommer pour les arguments de fonction et autres. Exemple:Pouvez-vous vous référer à une énumération nommée comme si elle était anonyme dans D?

enum someLongNameThatTheCLibraryUses 
{ 
    A, 
    B, 
} 

Actuellement, je dois s'y référer comme ceci:

someLongNameThatTheCLibraryUses.A; 

Mais je préfère:

A; 

que je pouvais faire ceci:

alias someLongNameThatTheCLibraryUses a; 
a.A; 

Mais je ne veux pas faire cela dans le module de la bibliothèque, donc je devrais o où il est utilisé, ce qui serait ennuyeux.

Existe-t-il un moyen de le faire?

Répondre

5

Si vous souhaitez sécuriser le type avec des énumérations anonymes, vous pouvez créer un nouveau type distinct en utilisant typedef et l'utiliser comme type de base de l'énumération anonyme. Exemple:

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 
} 
+4

40 minutes; J'adore cet endroit. – Bernard

+2

Et par extension, vous. : p – Bernard

Questions connexes