Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

membre static partagé par plusieurs templates (enregistrement de classes)

2 réponses
Avatar
Okerampa
Bonjour. J'ai un peu fouill=E9 dans les archives, mais je n'ai rien
trouv=E9 de semblable (peut =EAtre que j'ai mal cherch=E9...)

si je fais :
template <class T>
Classe
{
static int i;
}

et que je cr=E9=E9e plusieurs classes Classe<int> Classe<Classe2> etc.
j'aurai un membre static diff=E9rent pour chacune des classes. C'est ce
que je souhaite, car il me faut un identifiant pour chacune de mes
classes...

Cependant, j'aimerais aussi avoir un membre static commun =E0 toutes mes
classes, pour par exemple enregistrer un manager.

En gros, je voudrais pouvoir appeler quelque chose comme :
Classe::setControl(xxx) { static
commun_a_toutes_mes_classes_de_template =3D xxx; }, pour une
initialisation.

Dans les moyens d=E9tourn=E9s d'y arriver, je ne vois qu'un singleton avec
mon xxx auquel je pourrais acc=E9der depuis un constructeur de
Classe<yyy> (donc j'y acc=E8derais autant de fois que j'ai de classes =E0
enregistrer), mais j'aimerais autant =E9viter ce genre de choses...
Bref je cherche surtout un moyen de faire de l'enregistrement de
classes automatique.

Voil=E0, si quelqu'un a d=E9j=E0 rencontr=E9 ce probl=E8me ou a une solutio=
n
qu'il aime bien...
Merci pour tout commentaire ;)

Okerampa, qui aime pas trop les bouts de colle mais bon...

2 réponses

Avatar
Jean-Marc Bourguet
Okerampa writes:

Bonjour. J'ai un peu fouillé dans les archives, mais je n'ai rien
trouvé de semblable (peut être que j'ai mal cherché...)

si je fais :
template <class T>
Classe
{
static int i;
}

et que je créée plusieurs classes Classe<int> Classe<Classe2> etc.
j'aurai un membre static différent pour chacune des classes. C'est ce
que je souhaite, car il me faut un identifiant pour chacune de mes
classes...

Cependant, j'aimerais aussi avoir un membre static commun à toutes mes
classes, pour par exemple enregistrer un manager.



Si j'ai bien compris:

class Base_Commune
{
protected:
static int counter;
};

template <typename T>
class Classe: private Base_Commune
{
private:
static int id;
};

...

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Okerampa
On 28 nov, 18:43, Jean-Marc Bourguet wrote:
Okerampa writes:
> Bonjour. J'ai un peu fouillé dans les archives, mais je n'ai rien
> trouvé de semblable (peut être que j'ai mal cherché...)

> si je fais :
> template <class T>
> Classe
> {
>     static int i;
> }

> et que je créée plusieurs classes Classe<int> Classe<Classe2> etc.
> j'aurai un membre static différent pour chacune des classes. C'est ce
> que je souhaite, car il me faut un identifiant pour chacune de mes
> classes...

> Cependant, j'aimerais aussi avoir un membre static commun à toutes me s
> classes, pour par exemple enregistrer un manager.

Si j'ai bien compris:

class Base_Commune
{
protected:
static int counter;

};

template <typename T>
class Classe: private Base_Commune
{
private:
static int id;

};




Oui. Très sottement je m'étais dit que ça ne ferait que déplacer le
problème alors qu'en fait ça le résout :p (vu que la variable restera
bien unique et partagée par toutes les classes dérivées quelles
qu'elles soient).

Merci !