On Thu, Sep 28, 2006 at 12:39:57PM +0200, Abdelrazak Younes wrote:
> Again, I prefer to have one single point of access for all global 
> variable. The logical place to put them is in Application. When it's 
> written "theApp->XXX", I know that this is a unique instance variable. 
> "XXX" alone doesn't tell me anything by itself.

You could have global accessors

  Applcation & theApplication()
  LyXFunc & theLyXFunc()
  BufferList & theBufferList()

etc.

> I am not sure I parsed the above correctly... Application is designed 
> specifically for this: it contains unique instance of objects:
> 
> - Clipboard
> - Selection
> - LyXFunc
> - BufferList
> 
> I might add some more (egg quitting).
> 
> Are you sure that gcc doesn't? You can compile this:
> 
> class A;
> 
> class B {
> private:
>       boost::scoped_ptr<A> a_;
> }

If it compiles it is coincidence. It is not required to 
compile without a full declaration of 'A' in scope.

So MSVC is not to blame here.

> >I hope you mean pimpl Application.
> 
> Of course I mean "put these member in a pimpled Application".

Ok.. so if 'Application' is really only a very cheap wrapper around a
set of otherwise global entities, and everything hides behind a pimple
such that #include "Application.h" is really cheap (as in "does not 
ppull in other headers") I could live with it even as a long-term
solution even if I think that serpate singletons are better.

More of a rationale:

        class Foo {
                Bar & bar();
        };

        Foo & theFoo();

        theFoo().bar()

is basically equivalent to 


        class Foo {
                static Bar & bar();
        };

        Foo::bar()

which in turn is equivalent to 

        namespace Foo {
                Bar & bar();
        };

        Foo::bar()

which in turn is not much different from

  Bar & fooBar();

  fooBar() 

or,. for clarity
  
  Bar & theBar();

  theBar() 

Andre'

Reply via email to