[gdal-dev] RFC 48: Geographical networks support

Even Rouault even.rouault at spatialys.com
Fri Jul 10 06:39:07 PDT 2015


> 
> The compiler didn't let me dynamic cast from void* to void* (as the
> GDALMajorObjectShadow* is typedef void* and GNMNetworkShadow*,
> GNMGenericNetworkShadow* also void). Any idea how to solve this?

I think you need to statically recast the shadowed types to the real C++ 
GDALMajorObject* before doing the dynamic_cast to the real C++ GNMNetwork* 
type.

See

#include <stdio.h>

class GDALMajorObject
{
    public:
        GDALMajorObject() {}

        virtual void foo() {}
};

class GDALDataset: public GDALMajorObject
{
    public:
        GDALDataset() {}
};

class GTiffDataset: public GDALDataset
{
    public:
        GTiffDataset() {}
};

class GDALNetwork: public GDALDataset
{
    public:
        GDALNetwork() {}
};

typedef void* shadowMajorObject;

int main(int argc, char* argv[])
{
    GTiffDataset* tiff = new GTiffDataset();
    GDALNetwork* network = new GDALNetwork();
    shadowMajorObject shadowed_tiff = 
(shadowMajorObject)static_cast<GDALMajorObject*>(tiff);
    shadowMajorObject shadowed_network = 
(shadowMajorObject)static_cast<GDALMajorObject*>(network);
    printf("%p is NULL\n", 
dynamic_cast<GDALNetwork*>((GDALMajorObject*)shadowed_tiff));
    printf("%p is not NULL\n", 
dynamic_cast<GDALNetwork*>((GDALMajorObject*)shadowed_network));
    return 0;
}

Those cast operations should also be done in a function of the C API I think 
to avoid depending on the C++ objects.


-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the gdal-dev mailing list