DRAFT document on coding conventions in kde libraries

Thiago Macieira thiago at kde.org
Mon Mar 6 12:14:53 GMT 2006


Allan Sandfeld Jensen wrote:
>On Monday 06 March 2006 10:44, Thiago Macieira wrote:
>> Allan Sandfeld Jensen wrote:
>> >It is unreliable across shared libaries. If you have a non-QObject
>> > based heirachy you should implement your own type-system rather than
>> > rely on dynamic_cast.
>>
>> I'd rather people used dynamic_cast<> rather than write and rewrite
>> their own system.
>>
>> They just have to be warned against the pitfalls that it may
>> represent. In special: do not ever use dynamic_cast in a class that is
>> not marked _EXPORT.
>
>I don't think that will help with dlopen'ed libraries or plugins.

You said libraries. So let's make the distinction clear here:

- Libraries are those that you link to and NEVER dlopen.
- Modules are those that you dlopen and NEVER link to.
Those are the only two options.

You're safe using dynamic_cast<> across libraries, as long as the classes 
are exported. It's even possible to use dynamic_cast if the object is an 
unknown, non-exported class, as long as the class you're trying to cast 
it to is exported.

You're also safe using dynamic_cast<> across modules as long as you're 
casting the object to an exported and well-defined class: this class MUST 
have a virtual destructor and its typeinfo MUST be in a library (which 
means there must be at least one non-inline virtual method in it). I hope 
I'm not wrong here.

You're not safe using dynamic_cast<> across modules if the above isn't 
respected.
-- 
  Thiago Macieira  -  thiago (AT) macieira.info - thiago (AT) kde.org
    PGP/GPG: 0x6EF45358; fingerprint:
    E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358

1. On frumscafte, hwonne time_t wæs náht, se scieppend þone circolwyrde 
wundorcræftlíge cennede and seo eorðe wæs idel and hit wæs gód.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 191 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20060306/1926b58d/attachment.sig>


More information about the kde-core-devel mailing list