Russian Qt Forum
Ноябрь 23, 2024, 17:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: проблема static vs member  (Прочитано 2141 раз)
Joe
Гость
« : Июль 30, 2010, 13:56 »

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

У Callback-функций есть пользовательские параметры?

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

Код:
DWORD WINAPI ThreadProc(LPVOID lpParameter);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 20.