[Marble-devel] [RFC] remove MARBLE_PLUGIN macro

Jens-Michael Hoffmann jensmh at gmx.de
Thu Mar 26 16:44:07 CET 2009


Hi,

in the Marble::RenderPlugin header we have the MARBLE_PLUGIN macro, it is 
defined as follows:

#define MARBLE_PLUGIN(T) public:\
    virtual RenderPlugin* pluginInstance() { return new T(); };

Then this macro is used in the plugin classes like for example in 
PlacemarksPlugin.h:

=== cut ===
class PlacemarksPlugin : public RenderPlugin
{
    Q_OBJECT
    Q_INTERFACES( Marble::RenderPluginInterface )
    MARBLE_PLUGIN( PlacemarksPlugin )

    void setBrushStyle( GeoPainter *painter, GeoDataDocument* root,
				QString styleId );
    void setPenStyle( GeoPainter *painter, GeoDataDocument* root,
				 QString styleId );
    bool renderGeoDataGeometry( GeoPainter *painter,
				 GeoDataGeometry *geometry, QString styleUrl );
    bool renderGeoDataFeature( GeoPainter *painter, GeoDataFeature *feature );

    QBrush m_currentBrush;
    QPen m_currentPen;
    
 public:

=== cut ===

There are some issues with this macro:

1. it contains "public:". This means that even if you put the macro invocation 
in the private section of a class everything behind the macro and the 
next "private:" or "protected:" becomes public. As you can see in the example 
given above this is not just a theoretical issue.

2. the name is misleading. This macro only is useful for classes derived from 
RenderPlugin.

3. the macro implements a method inline, which in this case might do not much 
harm

4. coding style. The use of macros is generally discouraged in C++. 


Therefore I suggest to apply the attached patch which removes the macro and 
replaces it with proper C++.


Best Regards

Jens-Michael

-------------- next part --------------
A non-text attachment was scrubbed...
Name: remove-marble-plugin-macro.patch
Type: text/x-diff
Size: 16622 bytes
Desc: not available
Url : http://mail.kde.org/pipermail/marble-devel/attachments/20090326/5e7de2ef/attachment.bin 


More information about the Marble-devel mailing list