J'essaye d'assigner une valeur unique aux membres const static unsigned int
, sans avoir à penser à assigner les bonnes valeurs moi-même (empêchant des erreurs humaines). J'ai créé une solution minimale pour les membres static unsigned int
, mais je voudrais vraiment utiliser const
à la place, parce que c'est plus rapide (et soigné).Comment affecter const static à une macro incrémentielle?
C'est ce que je suis venu avec:
// cat.h
#define ANIMAL_INDEX 0
#define GET_ANIMAL_INDEX (ANIMAL_INDEX (ANIMAL_INDEX + 1))
class Cat
{
protected:
Cat(){}
public:
const static unsigned int lynx = GET_ANIMAL_INDEX; // 0
const static unsigned int tiger = GET_ANIMAL_INDEX; // 1
};
Ceci est juste un exemple, mais imaginez que j'aurais aimé 1000 animaux ou quelque chose.
Est-il possible de créer une macro qui s'incrémente chaque fois qu'elle est utilisée pour l'affectation ou dois-je créer un script qui génère le cat.h
?
C'est vraiment ce que [* énumérations *] (http://en.cppreference.com/w/cpp/language/enum) sont pour. –
@Someprogrammerdude Je veux faire une énumération complexe capable de faire de l'héritage. Une classe dog.h aurait des constantes qui n'ont pas la même valeur que les constantes de la classe cat.h. De cette façon, je pourrais appeler Animal :: lynx et Animal :: corgi sans conflits de valeur. – oddRaven
Quelle est la solution que vous avez? Ce ne peut pas être le code dans votre question, puisque ce code est erroné. L'exigence dans votre commentaire est important et devrait être dans la question elle-même. – rici