Распространённая проблема: Надо залезть в исходник библиотеки и поправить/расширить функциональность объектов некоторого класса.
Грязный хак: (Осторожно, маскируется под нормальное решение благодаря общеупотребительности) —
Создать свой класс, производный от библиотечного и перегрузить (исправить) нужные методы.
А теперь я заставлю сторонников этой "технологии" раскаятся в содеянном!
Посмотрим, на что обречён разработчик:
1) Комбинаторный взрыв вариантов обходных "решений".
2) Правка и предусматривание фабричных функций создания экземпляров класса.
3) Дублирование кода при копировании и модификации метода.
Весёлая "игра", не правда ли? Могу предложить сделать её веселей с помощью ещё более грязных хаков (фич):
1) Динамически менять версию класса объекта подменой таблицы виртуальных функций и переаллокацией.
2) Помечать любой функциональный блок атрибутом версии.
3) Хранить все версии методов.
4) Хранить каждый метод в самостоятельной dll (сборке). (Напрямую к делу не относится, но очень вкусно).
Сразу оговорюсь, что функционировать всё это должно в среде, аналогичной GC.
Вместо тухлых помидоров надеюсь на конструктивное обсуждение:
Где такое уже было или есть?
Есть ли более изящные решения?
Каковы плюсы и минусы?
Что мешает?
На чём сделать?