Изначально у меня все было как публичные члены Elem, но теперь я решил добавить немного инкапсуляции, чтобы вы не могли получить доступ к внутренним компонентам пользовательского кода при определении виджетов/композитов; при написании кода макетирования я решил, что элементы контейнера, такие как Grid, Вертикальный, Горизонтальный, Stack и т. д., должны задавать позиции макета управляемых объектов и тому подобное (
Код: Выделить всё
internal_varУменьшенный фиктивный код:
Код: Выделить всё
struct Elem{
public:
int internal_var;
};
struct FancyElem : public Elem{...};
struct ElemContainer : public Elem{
void foo(){
for(Elem* ptr : cont){
ptr->internal_var++; //modify internals here
}
}
std::vector cont;
};
Код: Выделить всё
struct Elem{
// mark internals as protected/private
protected:
int internal_var;
};
struct ElemContainer : public Elem{
void foo(){
for(Elem* ptr : cont){
ptr->internal_var++; //cant access protected member
}
}
std::vector cont;
};
Код: Выделить всё
struct Elem{
friend class ElemContainer;
protected:
int internal_var;
};
Базовый вариант: я хотел бы запретить публичный доступ к Internal_var, но я хочу иметь возможность изменять его с помощью указателя из внутри производного класса, поэтому мне интересно, есть ли альтернативы методу friends.
Подробнее здесь: https://stackoverflow.com/questions/798 ... ed-members
Мобильная версия