C ++ «врезается» в виртуальные функции базовых классов

0

Я думаю, это будет странный вопрос, но мне интересно, если это вообще возможно. Если я использую библиотеку, в которой у меня нет контроля, и если у нее есть класс Entity, который имеет виртуальные функции, а сама библиотека создает такие сущности, как Entity * e = new Entity(), есть ли способ получить класс от Entity, переопределить виртуальные функции и каким-то образом создать объект, который будет "нажимать" на виртуальные функции, если бы у меня был список объектов, которые были созданы с Entity * e = new Entity()? Обратите внимание, что я не контролирую этот код, поэтому я не могу изменить создание исходного объекта так, чтобы он был как Entity * e = new MyEntity().

  • 1
    Может быть, с уловками компоновщика, но не внутри самого C ++. Вот почему внедрение зависимостей - хорошая идея для тестируемости.
Теги:

1 ответ

1
Лучший ответ

Это невозможно при использовании стандартных конструкций C++. Вам нужно взломать vtable, с помощью google я нашел следующий хак, который достигает этого: http://www.codeproject.com/Articles/54238/Changing-an-Object-s-Polymorphic-Behavior-at-Runti. Конечно, вы должны быть очень осторожны, я бы не рекомендовал это использовать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню