template based d pointer class

Luis Pedro Coelho luis_pedro at netcabo.pt
Sat May 17 21:25:22 BST 2003

Hash: SHA1

Le Samedi 17 Mai 2003 21:35, Ravikiran Rajagopal a écrit :
>   This seems like a fairly complicated way to store extra data members. As

It seems to me to be the same. It is, of course, a hack, but it is probably 
needed if there is no d-ptr. For that situation, it's probably a good 

>   One simpler(?) solution would be to define a generic singleton pattern
> template class [1] that would be usable much more widely in KDE. Then,

I don't know Loki [1-mine]. I can more or less guess what you are hinting at, 
though. And I think that it isn't needed here, so we might as well just solve 
this one problem. Maybe a generic singleton would be nice to deal with all 
the problems dumb singletons can have when you dlopen/dlcose them, for 
>   A nitpick: instead of the #define, it would be better to add a private
> const member function. 

non-const flavour as well, probably. This should be binary compatible (adding 
inline private functions is binary compatible, no?).

> See http://www.gotw.ca/gotw/012.htm for a similarly flavored example.

I cannot see the connection, sorry.

>   Anyway, are there any classes with publicly available API without
> d-pointers?

I think this was about a concrete problem Alex is dealing with..

Overall, I think that the code that Alex posted is a clever solution to the 
problem in a "this is an ugly hack but we cannot break binary compatibility" 
sort of way. I agree with you on the private inline members, though.

Also, I would say one should do (marked changes with "*********") to get rid 
of explicit references to the implementation:

class KBookmarkBarPrivate : public Private<KBookmarkBar, KBookmarkBarPrivate> 
    QPtrList<KAction> m_actions;

KBookmarkBarPrivate::neededType KBookmarkBarPrivate::base::d_ptr = 0;

IMPLEMENTATION: (most code from seli's developer.kde.org page on bic)
- ---------------

template<class KBookmarkBar, class KBookmarkBarPrivate>
class Private {
	typedef Private<KBookmarkBar,KBookmarBarPrivate> base;
	typedef QPtrDict<KBookmarkBar,KBookmarkBarPrivate>* neededType;

		static neededType d_ptr;

- --------------------

The overall idea looks fine, though. Don't forget to leave a comment saying 
how this all should go away for KDE 4.

[1-mine]: If you have a copy of "Modern C++ Design" you want to sell cheaply 
in Vienna, tell me ;-)

- -- 
Luis Pedro Coelho

"Technology does not always equal progress."
Douglas Coupland
Version: GnuPG v1.0.7 (GNU/Linux)


More information about the kde-core-devel mailing list