[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