Я бы предпочел использовать дружественный класс tn::InnerClass, просто чтобы было понятно. Особенно, если есть еще один InnerClass.
Код: Выделить всё
class MainClass;
class InnerClass;
namespace tn
{
template
class InnerClass
{
public:
auto empty() -> int { return static_cast(this)->privateMember; }
};
}
namespace foo
{
class OtherClass : public tn::InnerClass
{
friend class ::MainClass;
friend class InnerClass; // tn:: must NOT be used.
friend class ::InnerClass; // Otherwise InnerClass::empty() fails to compile
int privateMember {};
};
}
class InnerClass
{
auto empty(foo::OtherClass & otherClass ) -> int { return otherClass.privateMember; }
};
class MainClass
{
auto bar()
{
foo::OtherClass otherClass;
otherClass.empty();
}
};
int main()
{
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... base-class
Мобильная версия