J'ai une classe de base appelée Component
qui a un certain nombre de classes dérivées. Je veux que chaque classe soit associée à un entier (peu importe quel composant obtient quelle valeur, tant qu'ils commencent à 0 et sont contigus). Je ne sais pas comment faire cela directement, donc dans le même fichier que je Component
ajouté ce qui suit:Variable statique réinitialisant sa valeur à 0 par elle-même apparemment
template <typename T>
class ComponentIdentifier
{
public:
static unsigned int cid;
};
static unsigned int CIDCounter = 0;
template <typename T> unsigned int ComponentIdentifier<T> = CIDCounter++;
template <typename T> unsigned int ComponentID()
{
return ComponentIdentifier<T>::cid;
}
unsigned int ComponentCount(); // Defined in .cpp file, just returns CIDCounter
Maintenant, je testé la fonction ComponentID() et il semble fonctionner très bien. Chaque classe de composant sur laquelle j'ai essayé ComponentID a retourné un entier différent comme je le pensais. Cependant, chaque fois que j'appelle ComponentCount, j'obtiens 0.
par exemple. si j'ai les lignes de code suivantes:
std::cout << ComponentID<AAA>() << std::endl;
std::cout << ComponentID<BBB>() << std::endl;
std::cout << ComponentID<CCC>() << std::endl;
std::cout << ComponentCount() << std::endl;
alors ma sortie est:
0
1
2
0
je soupçonne que ce qui se passe est que CIDCounter est réglé sur 0 à nouveau après son utilisé pour définir de la cid de chaque composante, mais je ne sais pas à coup sûr et cela semble un peu bizarre. Y at-il un moyen de faire ce que je veux ou suis-je folle et tout ce plan voué à l'échec?
Merci, ça l'a fait. – Alex