Joe
Гость
|
|
« : Июль 30, 2010, 13:56 » |
|
Есть задача -сторонний API (Renderman Rif-filters API, если кому интересно) требует возвращать объект, унаследованный от класса в котором есть куча полей (сallback-поля), являющихся указателями на функции (callback-функции), разного всякого типа. В зависимости от того, какие из этих полей не NULL, а содержат указатели на какие-то конкретные функции (определяет это сам объект, в процессе выполнения - в конструкторе или по ходу вызовов) - приложение вызывает эти функции. Вся подлость ситуации в том, что функции эти - статические, и ничего не знают про какие-либо не-глобальные объекты. То есть это ведёт к тому, что я создав объект один раз, инициализировав поля адресами некоторых функции - никак не смогу больше создать аналогичный объект, но с другим набором данных, описывающих внутреннее состояние. Нет, конечно смогу - но функции, которые я назначаю на callback-поля не имеют доступа к данным того объекта, какому они назначены - они вообще не-member-функции. Что можно посоветовать в таком случае? Не хочу хранить состояние объектов в глобальной структуре данных - тогда теряется возможность иметь несколько таких объектов, а это сильно ослабляет полезность работы. Вызов callback-функций происходит "хаотично" с точки зрения программируемого модуля. По сути дела - главная проблема в том, чтобы узнать, через какой из объектов был сделан вызов этой callback-функции. Может, кто-то решал похожую задачу, или впомнит какой-нит паттерн про такое взаимодействие.
|