Переглянути джерело

Remove excessive casts to void

Ivan Savenko 1 рік тому
батько
коміт
615361a4d2
1 змінених файлів з 4 додано та 4 видалено
  1. 4 4
      lib/serializer/BinarySerializer.h

+ 4 - 4
lib/serializer/BinarySerializer.h

@@ -85,7 +85,7 @@ class BinarySerializer : public CSaverBase
 	class CBasicPointerSaver
 	{
 	public:
-		virtual void savePtr(CSaverBase &ar, const void *data) const =0;
+		virtual void savePtr(CSaverBase &ar, const Serializeable *data) const =0;
 		virtual ~CBasicPointerSaver() = default;
 
 		template<typename T> static CBasicPointerSaver *getApplier(const T * t=nullptr)
@@ -99,10 +99,10 @@ class BinarySerializer : public CSaverBase
 	class CPointerSaver : public CBasicPointerSaver
 	{
 	public:
-		void savePtr(CSaverBase &ar, const void *data) const override
+		void savePtr(CSaverBase &ar, const Serializeable *data) const override
 		{
 			auto & s = static_cast<BinarySerializer &>(ar);
-			const T *ptr = static_cast<const T*>(data);
+			const T *ptr = dynamic_cast<const T*>(data);
 
 			//T is most derived known type, it's time to call actual serialize
 			const_cast<T*>(ptr)->serialize(s);
@@ -283,7 +283,7 @@ public:
 		if(!tid)
 			save(*data); //if type is unregistered simply write all data in a standard way
 		else
-			applier.getApplier(tid)->savePtr(*this, static_cast<const void*>(data));  //call serializer specific for our real type
+			applier.getApplier(tid)->savePtr(*this, static_cast<const Serializeable*>(data));  //call serializer specific for our real type
 	}
 
 	template < typename T, typename std::enable_if_t < is_serializeable<BinarySerializer, T>::value, int  > = 0 >