AHO>Имеется С библиотека с неизменяемым интерфейсом, одна из функций выглядит так:
AHO>AHO>typedef void(*Callback)(void * internalState, Data * data);
AHO>void addCallback(void * internalState, Callback * callback);
AHO>
AHO>internalState – сугубо внутренняя структура библиотеки, data – данные получаемые из библиотеки, т.е. никаких void * userData нет.
Ещё, как вариант (если другие не подходят), можно прятать указатель/индекс данных в padding'е internalState — если конечно его достаточно, и он нигде не теряется/не затирается.