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: egrep -l "_cast<" ~/gdal2.2.0/gdal-2.2.0/frmts/*/*cpp |\ xargs grep -A10 ::IReadBlock | egrep "_cast<.*Dataset \*>.*poDS *\);" |\ sed -e 's=/home/werdna/gdal2.2.0/gdal-2.2.0/frmts/==' | sort -t= -k2 dods/dodsdataset2.cpp- DODSDataset *poDODS = dynamic_cast<DODSDataset *>(poDS); blx/blxdataset.cpp- BLXDataset *poGDS = reinterpret_cast<BLXDataset *>(poDS); raw/cpgdataset.cpp- CPGDataset *poGDS = reinterpret_cast<CPGDataset *>( poDS ); raw/cpgdataset.cpp- CPGDataset *poGDS = reinterpret_cast<CPGDataset *>( poDS ); raw/genbindataset.cpp- GenBinDataset *poGDS = reinterpret_cast<GenBinDataset *>( poDS ); gsg/gsbgdataset.cpp- GSBGDataset *poGDS = reinterpret_cast<GSBGDataset *>(poDS); hdf4/hdf4imagedataset.cpp- HDF4ImageDataset *poGDS = reinterpret_cast<HDF4ImageDataset *>( poDS ); jp2lura/jp2lurarasterband.cpp- JP2LuraDataset *poGDS = reinterpret_cast<JP2LuraDataset *>(poDS); raw/landataset.cpp- LANDataset *poLAN_DS = reinterpret_cast<LANDataset *>( poDS ); leveller/levellerdataset.cpp- LevellerDataset *poGDS = reinterpret_cast<LevellerDataset *>( poDS ); ngsgeoid/ngsgeoiddataset.cpp- NGSGEOIDDataset *poGDS = reinterpret_cast<NGSGEOIDDataset *>( poDS ); nitf/nitfrasterband.cpp- NITFDataset *poGDS = reinterpret_cast<NITFDataset *>( poDS ); northwood/grcdataset.cpp- NWT_GRCDataset *poGDS = reinterpret_cast<NWT_GRCDataset *>( poDS ); northwood/grddataset.cpp- NWT_GRDDataset *poGDS = reinterpret_cast<NWT_GRDDataset *>(poDS); ozi/ozidataset.cpp- OZIDataset *poGDS = reinterpret_cast<OZIDataset *>( poDS ); plmosaic/plmosaicdataset.cpp- PLMosaicDataset* poMOSDS = reinterpret_cast<PLMosaicDataset *>( poDS ); png/pngdataset.cpp- PNGDataset *poGDS = reinterpret_cast<PNGDataset *>( poDS ); rasterlite/rasterlitedataset.cpp- RasterliteDataset* poGDS = reinterpret_cast<RasterliteDataset *>( poDS ); rik/rikdataset.cpp- RIKDataset *poRDS = reinterpret_cast<RIKDataset *>( poDS ); rmf/rmfdataset.cpp- RMFDataset *poGDS = reinterpret_cast<RMFDataset *>( poDS ); sgi/sgidataset.cpp- SGIDataset* poGDS = reinterpret_cast<SGIDataset *>( poDS ); srtmhgt/srtmhgtdataset.cpp- SRTMHGTDataset* poGDS = reinterpret_cast<SRTMHGTDataset *>( poDS ); terragen/terragendataset.cpp- TerragenDataset& ds = *reinterpret_cast<TerragenDataset *>( poDS ); usgsdem/usgsdemdataset.cpp- USGSDEMDataset *poGDS = reinterpret_cast<USGSDEMDataset *>( poDS ); vrt/vrtwarped.cpp- VRTWarpedDataset *poWDS = reinterpret_cast<VRTWarpedDataset *>( poDS ); webp/webpdataset.cpp- WEBPDataset* poGDS = reinterpret_cast<WEBPDataset *>( poDS ); xyz/xyzdataset.cpp- XYZDataset *poGDS = reinterpret_cast<XYZDataset *>( poDS ); zmap/zmapdataset.cpp- ZMapDataset *poGDS = reinterpret_cast<ZMapDataset *>( poDS ); aaigrid/aaigriddataset.cpp- AAIGDataset *poODS = static_cast<AAIGDataset *>(poDS); hdf5/hdf5imagedataset.cpp- HDF5ImageDataset *poGDS = static_cast<HDF5ImageDataset *>(poDS); iris/irisdataset.cpp- IRISDataset *poGDS = static_cast<IRISDataset *>(poDS); jdem/jdemdataset.cpp- JDEMDataset *poGDS = static_cast<JDEMDataset *>(poDS); jpeg/jpgdataset.cpp- JPGDataset *poJDS = static_cast<JPGDataset *>(poDS); saga/sagadataset.cpp- SAGADataset *poGDS = static_cast<SAGADataset *>( poDS ); 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 ? Thanks, Andrew C Aitchison _______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/gdal-dev