Russian Qt Forum

Программирование => С/C++ => Тема начата: Joe от Июль 30, 2010, 13:56



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


Название: Re: проблема static vs member
Отправлено: Anchorite от Август 04, 2010, 17:20
У Callback-функций есть пользовательские параметры?

Как например у потоковой функции из Win32 API:

Код:
DWORD WINAPI ThreadProc(LPVOID lpParameter);