2013-11-24 5 views
0

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

+1

Возможно, с помощью утилит-линкера, но не внутри самого C++. Вот почему инъекция зависимостей - хорошая идея для проверки. –

ответ

1

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

Смежные вопросы