[bt-devel] namespace problems

Nikolay Igotti bt-devel@crosswire.org
Mon, 21 Oct 2002 10:34:13 -0700 (PDT)


On 21 Oct 2002, David White wrote:

> On Mon, 2002-10-21 at 07:49, Nikolay Igotti wrote:
> >  Sure, something like this:
> > const QString& ResourseManager::getToolTip(QString& key) and call it like 
> > this:
> > ResourseManager::getToolTip("mainMenu::file::quit")
> 
> yes, this seems reasonable. Although, you could just have an extern
> global std::map to do the job...
> 
> std::map<QString,QString> tooltips;
 Above approach would help if you want to change implementation to do 
something fancy (like load resourses on demand or provide missed 
resourses).

> 
> > 
> >  BT is very C++ heavyweight (templates, STL) and add yet another C++ 
> > feature where it's not needed isn't a good idea.
> 
> BibleTime is written in C++. What's wrong with it using the features of
> the language it's written in? Namespaces or namespace-like features are
> common in almost all modern programming languages (Perl, Python, C#,
> Java, to name a few), and I don't see any problem using them. Even Sword
> has gone toward using namespaces recently.
 Well, to be honest I don't think C++ is "language", maybe features 
bloated meta-language. My own preference is to code on some subset of C++
which I'm sure is portable (something like Mozilla people describe in 
their portability guidelines), and which doesn't use:
 - exceptions
 - templates (well, beside STL) or some very rare cases when they're 
   really needed
 - namespaces (gcc had prioblems with them some time ago)

> 
> For truly advanced C++ features, which do not have good platform
> support, such as partial specialization of templates, I can understand
> not using them. Namespaces are a fairly basic feature.
 You're right, but in this case I think we could live without use of this 
feature.

 Nikolay


> > > 
> > > >  Joachim, are you sure this namespace based approach is good way to do
> > > > i18n and resources management? I feel it's not. Maybe resourse file
> > > > +resouse manager would be better?
> > > >
> > > >  Nikolay.
> > > >
> > > > On Sat, 19 Oct 2002, Joachim Ansorg wrote:
> > > > > David White, I think this eMail is especially for you because you know
> > > > > the namespaces well.
> > > > >
> > > > > You pointed me into the direction to use namespaces for the treelike
> > > > > structure I wanted.
> > > > >
> > > > > Now I have something like
> > > > >
> > > > > namespace CResMgr {
> > > > >   inline const QString makeToolTip( const QString& text ) {
> > > > >     return text;
> > > > >   };
> > > > >   inline const QString makeWhatsThis( const QString& title, const
> > > > > QString& description )  {
> > > > >     return
> > > > > QString::fromLatin1("<center><B>%1</B></center><HR>%2").arg(title).arg(de
> > > > >scription); };
> > > > >
> > > > >   namespace mainMenu { //Main menu
> > > > >     namespace file { //Main menu->File
> > > > >       namespace clearQueue {
> > > > >         const QString tooltip     = makeToolTip( i18n("Clear the printing
> > > > > queue") );
> > > > >         const QString whatsthis   = makeWhatsThis( tooltip, i18n("Clear
> > > > > the print queue of BibleTime. All items will be removed from the list and
> > > > > the print button will be disabled.") );
> > > > >         const QString icon        = QString::fromLatin1("queue");
> > > > >         const KShortcut accel     = KShortcut();
> > > > >         const char* actionName    = "fileClearQueue_action";
> > > > >       }
> > > > >       namespace print { //a standard action
> > > > >         const QString tooltip     = makeToolTip( i18n("Open the
> > > > > printerdialog") );
> > > > >         const QString whatsthis   = makeWhatsThis( tooltip, i18n("Open
> > > > > the printer dialog of BibleTime.  Here you can edit the print queue and
> > > > > assign styles to the items.") );
> > > > >       }
> > > > >       namespace quit { //a standard action
> > > > >         const QString tooltip     = makeToolTip( i18n("Close BibleTime")
> > > > > ); const QString whatsthis   = makeWhatsThis( tooltip, i18n("Close
> > > > > BibleTime and save the settings.") );
> > > > >       }
> > > > >     }
> > > > > }
> > > > > etc.
> > > > >
> > > > > But compiling BibleTime with this header included in two or more places I
> > > > > get the following compiler warnings about multiple symbol definitions:
> > > > >
> > > > > ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0x0):
> > > > > multiple definition of `CResMgr::mainMenu::file::clearQueue::actionName'
> > > > > bibletime_init.o(.data+0x0): first defined here
> > > > > ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0x4):
> > > > > multiple definition of
> > > > > `CResMgr::mainMenu::view::showMainIndex::actionName'
> > > > > bibletime_init.o(.data+0x4): first defined here
> > > > > ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0x8):
> > > > > multiple definition of `CResMgr::mainMenu::mainIndex::search::actionName'
> > > > > bibletime_init.o(.data+0x8): first defined here
> > > > > ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0xc):
> > > > > multiple definition of
> > > > > `CResMgr::mainMenu::window::loadProfile::actionName'
> > > > > bibletime_init.o(.data+0xc): first defined here
> > > > >
> > > > > How can I avoid these problems? I have no idea.
> > > > > Thank you very much for any help!
> > > 
> > > 
> > 
> 
> 
>