adr:
> > namespace server_lib
> {
> class TTraceSound
> {
[]
> void Trace(eTraceMessageType, const char*, ...);
>
> public:
> class TAnonymousAdapter
> {
> public:
> void Trace(eTraceMessageType, const char*, ...);
> };
[]
> };
>
> }; // END OF NAMESPACE
>
>
> Так почему же его нельзы вызвать из метода Trace класса TAnonymousAdapter
> using namespace server_lib;
>
> > //----------------------------------------------------------
> void TTraceSound::TAnonymousAdapter::Trace(eTraceMessageType, const char*, ...)
> {
> TTraceSound::Play(); // Здесь error C2352
> }
> //----------------------------------------------------------
>
>
> И какой же тогда смысл в объявлении классов как вложенных впринципе, если нет доступа к мемберам внешнего?
У вложенного класса в С++ есть доступ к членам внешнего, но нет неявного указателя на экземпляр внешнего. Можно добавить его явно:
class TTraceSound
{
void Trace(eTraceMessageType, const char*, ...);
public:
class TAnonymousAdapter
{
public:
void Trace(eTraceMessageType, const char*, ...) { outer_->Trace(...); }
private:
friend class TTraceSound;
TAnonymousAdapter(TTraceSound* outer): outer_(outer) {}
TTraceSound* outer_;
};
};
PS Точка запятой здесь является ошибкой:
namespace server_lib {...};
Posted via RSDN NNTP Server 1.9 delta
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн