История изменений
Исправление monk, (текущая версия) :
то просто получишь ответ «no-such-method»
Так и в крестах ты получишь тот же ответ. Только на этапе компиляции - и это хорошо.
Выше уже согласились, что работает только в жёсткой статике:
class Object {};
Object *obj = deserialize(file);
try {
obj->new_run();
} except {
obj->run();
}
не компилируется
class Object {};
class ObjectV1: public Object
{ public: virtual void run(); };
class ObjectV2: public ObjectV1
{ public: virtual void new_run(); };
Object *obj = deserialize(file);
try {
(ObjectV2 *)obj->new_run();
} except {
(ObjectV1 *)obj->run();
}
всегда выполняет new_run, даже если deserialize вернул new ObjectV1().
Исправление monk, :
то просто получишь ответ «no-such-method»
Так и в крестах ты получишь тот же ответ. Только на этапе компиляции - и это хорошо.
Выше уже согласились, что работает только в жёсткой статике:
class Object {};
Object *obj = deserialize(file);
try {
obj->new_run();
} except {
obj->run();
}
не компилируется
class Object {};
class ObjectV1: public Object
{ public: virtual void run(); };
class ObjectV2: public ObjectV1
{ public: virtual void new_run(); };
Object *obj = deserialize(file);
try {
(ObjectV2 *)obj->new_run();
} except {
(ObjectV1 *)obj->run();
}
всегда выполняет new_run, даже если deserialize вернул new ObjectV1().
Исходная версия monk, :
то просто получишь ответ «no-such-method»
Так и в крестах ты получишь тот же ответ. Только на этапе компиляции - и это хорошо.
Выше уже согласились, что работает только в жёсткой статике:
class Object {};
Object *obj = deserialize(file);
try {
obj->new_run();
} except {
obj->run();
}
не компилируется
class Object {};
class ObjectV1: public Object
{ public: virtual void run(); };
class ObjectV2: public ObjectV1
public: virtual void new_run(); };
Object *obj = deserialize(file);
try {
(ObjectV2 *)obj->new_run();
} except {
(ObjectV1 *)obj->run();
}
всегда выполняет new_run, даже если deserialize вернул new ObjectV1().