Я на самом деле пользуюсь этим немного неприятным образом: кодовая идиома, которой я часто пользуюсь, - это закрытый член с функциями открытого доступа.
У меня есть MACRO (дрожь), который автоматически генерирует их из одной строки.
пример:
PROPERTY(int, MyVal);
... производит: ...
private:
int fMyVal;
public:
void setMyVal(const int f) { fMyVal = f; };
int getMyVal() { return fMyVal; };
Это прекрасно работает, если вы помните, что макрос PROPERTY переключает текущую видимость, что неприятно ....
например:
protected:
int v1;
PROPERTY (int, v2) // fv2 is private with public accessors
int v3; // whoops. f3 is public,