Здравствуйте, Hоmunculus, Вы писали:
H>Как считаете — friend это костыль для кривой архитектуры или норм?
В прямых руках норм. В конце-концов, при помощи friend можно не только наивно открыть доступ ко всем своим потрохам. Например, для friend придумали что-то вроде инверсии зависимости в виде паттерна Passkey, при помощи которого можно разрешать вызывать одну конкретную функцию классам из белого списка. Что-то вроде:
class Me {
public:
struct Passkey {
friend class Class1;
friend class Class2;
private:
Passkey() = default; // Доступен только друзьям
};
void SomeFunc(Passkey);
};
class Class1 {
public:
void CallMe() {
Me me;
me.SomeFunc(Me::Passkey{});
}
};