On mardi 23 mai 2017 11:40:08 CEST Andrew C Aitchison wrote: > I see that in http://www.gdal.org/gdal_drivertut.html the function > JDEMRasterBand::IReadBlock has > JDEMDataset *poGDS = static_cast<JDEMDataset *>(poDS); > (this is a change from gdal-2.1.3 and earlier where > frmts/jdem/jdemdataset.cpp has > JDEMDataset *poGDS = (JDEMDataset *) poDS; > ). > > However, I see that amongst other 2.2.0 drivers, reinterpret_cast > is more common than static_cast and the dods driver has dynamic_cast: > > My C++ is 25 years old and self taught, so I am still learning when to > use static_cast, dynamic_cast and reinterpret_cast (and const_cast). > > Can anyone more familiar with modern C++ guide me ?
In all those cases static_cast can be used. There have been a first pass of conversion from C style cast to C++ one using reinterpret_cast which is the equivalent of C style cast (it allows to cast virtually anything to anything). But we realized later it was a bit too lax and static_cast is a better fit when casting from parent to derived class. Both will result in the same code as there's no multiple inheritance in dataset class hierarchy (using reinterpret_cast would lead to runtime crashes in that case). So static_cast is always safer in those cases. We could also use dynamic_cast but as we are sure about the target type of cast, this is a bit overkill. The occurence in DODS could/should be replaced by a static_cast. Even -- Spatialys - Geospatial professional services http://www.spatialys.com
_______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/gdal-dev