Да, но вы должны предоставить экземпляр внешнего класса при создании внутреннего ... эти два типа [в основном] независимы, поэтому B
не связан ни с каким конкретным экземпляром API
.
Больше псевдокода
struct API {
void go();
struct B {
B(API& api) : api(api) { }
void go() { api.go(); }
};
};
API a;
B b(a);
b.go();
Кроме того, вы можете передать экземпляр API
в функцию B
[B::go(API&)
]
struct API {
void go();
struct B {
void go(API& api) { api.go(); }
};
};
API a1, a2;
B b;
b.go(a1);
b.go(a2);
Кроме того, API
не содержит экземпляр B
, если вы явно не добавите экземпляр.
struct API {
struct B { };
B b;
};
Также обратите внимание, что B
не нужно предоставлять дружбу API
. Как внутренний класс, B
может уже иметь доступ к API
закрытым / защищенным членам. Обратное неверно, однако ... API
не может получить доступ к B
закрытым / защищенным членам, если только B
не предоставит ему разрешение.