2 votes

Membre de la classe - const pour le monde extérieur, non-const pour la classe

Par exemple, j'ai une classe de carte qui a quelques membres : sizeX, sizeY, vecteur de tuiles, nom, etc.

Il existe deux approches de base pour gérer les variables auxquelles on accède de l'extérieur :

  • encapsulation, mais cela ajoute beaucoup de code et plus de typage (fonctions constantes setX() et getX())
  • avoir les variables auxquelles on accède souvent de l'extérieur en tant que membres publics, ce qui facilite les choses.

Je n'aime ni l'un ni l'autre. J'ai eu une idée : un membre de la classe, qui de l'extérieur agit comme const (donc vous pouvez y accéder facilement object.member mais c'est sûr) et à l'intérieur de la classe il est non-const. Cependant, pour autant que je sache, le c++ n'a pas cette possibilité. La seule solution (laide) que je connaisse est d'avoir tout ce qui est const et d'utiliser const cast à l'intérieur des fonctions de la classe.

Existe-t-il une meilleure approche en C++ 11 ? Existe-t-il un mot-clé pour cela ?

3voto

Marc Glisse Points 2377

Une solution simple consiste à réduire légèrement la quantité de texte à taper :

#define MEMBER(T,x) \
  private: T x##_; \
  public: T const& x () const { return x##_; }

struct A {
  MEMBER(int,x)
  MEMBER(double,y)
};

vous pouvez alors utiliser x_ et y_ à l'intérieur de la classe et x() et y() à l'extérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X