Член класса — const для внешнего мира, не const для класса

Ну, например, у меня есть класс карты, который имеет несколько членов: sizeX, sizeY, вектор плиток, имя и т. Д.

Существует два основных подхода к управлению его переменными, доступ к которым осуществляется извне:

  • инкапсуляция, но она добавляет много кода и больше функций ввода (setX () и getX () const)
  • иметь переменные, к которым часто обращаются извне как публичные члены, и не усложнять

Мне не нравится ни один из них. У меня возникла идея: член класса, который извне действует как const (так что вы можете легко получить к нему доступ, object.member, но это безопасно), а внутри класса он неконстантный. Однако, насколько я знаю, в С ++ этого нет. Единственный (безобразный) обходной путь, который я знаю, — это иметь все const и использовать const cast внутри функций класса.

Есть ли лучший подход для этого в C ++ 11? Есть ли ключевое слово для этого?

2

Решение

Простой обходной путь, чтобы немного уменьшить количество печатания:

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

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

тогда вы можете использовать x_ и y_ внутри класса, а x () и y () снаружи.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector