Bonjour,
J'ai une classe qui peut avoir deux sémantiques différentes (mais néanmoins apparentées).
J'aimerais changer le nom de certaines variables à l'aide d'un argument template booléen.
Est-ce possible ?
Bonjour,
J'ai une classe qui peut avoir deux sémantiques différentes (mais néanmoins apparentées).
J'aimerais changer le nom de certaines variables à l'aide d'un argument template booléen.
Est-ce possible ?
Hértiage + spécialisation, mais je trouve ca étrange comme besoin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 template<bool> struct Named; template<> struct Named<true> { int name1; protected: ~Named(){} } struct Named<false> { int name2; protected: ~Named(){} } template<bool b> struct A : Named<b> { };
Merci.
C'est effectivement la solution à laquelle j'étais arrivé dans le train après écrit mon message.![]()
Salut,
N'oublie, cependant, pas que les variables membres sont sensées n'être que des détails d'implémentation...
A ce titre, et pour respecter demeter, tu ne devrais jamais avoir besoin d'accéder à un membre ni par son nom, ni (idéalement du moins) au travers d'un accesseur une fois que tu es en dehors de la classe.
L'idéal serait beaucoup plus de faire en sorte que toutes les fonctions qui manipule le membre soient nommées de manière cohérente par rapport à la sémantique de tes classe, mais que ce membre ne soit purement et simplement pas accessible en dehors.
Bien sur, il n'est pas toujours possible de travailler de la sorte (entre autres quand un membre représente une propriété de la classe et non un moyen dont dispose cette classe pour fournir un service attendu), mais il reste préférable de travailler comme je l'indique "aussi souvent que possible"![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Cette classe est un POD (mis à part le constructeur, qui initialise les membres) dont tous les membres sont privés.
L'accès est géré par un espace de nom et des déclarations d'amitié.
En C, peut etre, parce que tu n'as pas d'autre choix...
Par contre, en C++, tu passerais par la fenêtre si tu venais à utiliser un void* dans un projet dont j'aurais la responsabilité, essentiellement parce qu'avec void*, tu perds toute possibilité de controle de type.
Ceci dit, le cas d'un POD (dans l'acception C++11) est, effectivement, le cas d'exception dont je parlais précédemment
Cependant, tu devrais plutot essayer de réfléchir à la possibilité éventuelle d'avoir une structure unique (avec des noms uniques !!!) agrémentée de différentes politiques qui, elles, exposeraient non plus les données du POD mais une interface qui le manipule, avec les noms adaptés au différentes possibilités![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager