2010-05-16 7 views
3

Puisque les données const statiques dans une classe est vraiment juste le sucre d'espace de noms pour les constantes Je pense queAjouter des données const statiques à un struct déjà défini

struct A { 
    float a; 

    struct B { 
     static const int b = 2; 
    }; 

}; 

équivaudrait à

struct A { 
    float a; 
}; 

struct A::B { 
    static const int b = 2; 
}; 

ou quelque chose similaire. Est-ce que quelque chose comme ça est possible en C++? Il serait utile pour moi de pouvoir étiqueter les définitions de classe que je tire de bibliothèques tierces avec des informations comme celle-ci.

+0

Quelles sont vos exigences concrètes? Le premier bloc est équivalent à 'struct A {float a; struct B; } struct A :: B {statique const int b = 2; }; ' –

Répondre

1

Non, vous ne pouvez pas simplement redéfinir les classes de cette façon.

Si vous souhaitez étiqueter des classes déjà définies, vous pouvez le faire de manière non intrusive en utilisant, par exemple, spécialisations de modèle:

template<class T> struct tagged; 

template<> struct tagged<A> { 
    static const int b = 42; 
}; 
3

Vous ne pouvez pas rouvrent définitions struct/classe en C++, de sorte que le mieux que vous pouvez faire est de créer des versions dérivées des struct tiers et ajoutez vos constantes de cette façon:

struct My_A : public A 
{ 
    static const int b = a; 
}; 

Sinon, vous pouvez gérer une carte de vos constantes avec des clés basées sur struct typeid.

J'aime aussi l'idée de Georg.

Questions connexes