Здравствуйте, AHOHUM, Вы писали:
AHO>Имеется С библиотека с неизменяемым интерфейсом, одна из функций выглядит так:
AHO>AHO>typedef void(*Callback)(void * internalState, Data * data);
AHO>void addCallback(void * internalState, Callback * callback);
AHO>
AHO>internalState – сугубо внутренняя структура библиотеки, data – данные получаемые из библиотеки, т.е. никаких void * userData нет.
1. Где создаётся и удаляется internalState? На нашей стороне?
2. В callback передаётся именно тот указатель internalState который был передан в addCallback?
I. Если на оба вопроса ответ да — то можно к нему прицепом нагрузить наши данные. То есть:
struct StateWithPayload
{
OurData payload;
InternalState internalState;
};
А callback будет доставать payload через
offsetof.
II. Если ответ да только на второй вопрос — то можно создать отображение из *internalState в наши данные, например
unordered_map<void*, OurData> — и callback будет знать из какой ячейки доставать payload.