История изменений
Исправление alysnix, (текущая версия) :
но в процессе оказалось, что в некоторых случаях необходим обратный каст.
и это правильно, поскольку обьекты разных потомков, и ты строго говоря не знаешь, имея указатель на базу, на какой в реальности обьект он указывает, у тебя ж в списке они разнородные. на самом деле если ты строго уверен, что каст пройдет, то есть уверен в типе обьекта потомка, по какому-то тегу, ты может кастовать статически.
class A{
};
class B: public A{
};
void ff(){
A* lp = new B;
B* lpp = static_cast<B*>(lp);
};
то есть храни в предке тег класса(перечисление), и потом, определив по тегу актуальный класс кастуй в него статиком. я так и делаю. единственно что, если ты ошибся в таком касте - у тебя будет бага в рантайме.
Исходная версия alysnix, :
но в процессе оказалось, что в некоторых случаях необходим обратный каст.
и это правильно, поскольку обьекты разных потомков, и ты строго говоря не знаешь, имея указатель на базу, на какой в реальности обьект он указывает, у тебя ж в списке они разнородные. на самом деле если ты строго уверен, что каст пройдет, то есть уверен в типе обьекта потомка, по какому-то тегу, ты может кастовать статически.
class A{
};
class B: public A{
};
void ff(){
A* lp = new B;
B* lpp = static_cast<B*>(lp);
};
то есть храни в предке тег класса(перечисление), и потом, определив по тегу актуальный класс кастуй в него статиком.