Сообщение Re: Метод класс как С колбек от 09.04.2015 11:42
Изменено 09.04.2015 11:44 Evgeny.Panasyuk
Здравствуйте, AHOHUM, Вы писали:
AHO>Имеется С библиотека с неизменяемым интерфейсом, одна из функций выглядит так:
AHO>
AHO>internalState – сугубо внутренняя структура библиотеки, data – данные получаемые из библиотеки, т.е. никаких void * userData нет.
1. Где создаётся и удаляется internalState? На нашей стороне?
2. В callback передаётся именно тот указатель internalState который был передан в addCallback?
I. Если на оба вопроса ответ да — то можно к нему прицепом нагрузить наши данные. То есть:
II. Есть ответ да только на второй вопрос — то можно создать отображение из *internalState в наши данные, например unordered_map<void*, OurData> — и callback будет знать из какой ячейки доставать payload.
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.
Re: Метод класс как С колбек
Здравствуйте, AHOHUM, Вы писали:
AHO>Имеется С библиотека с неизменяемым интерфейсом, одна из функций выглядит так:
AHO>
AHO>internalState – сугубо внутренняя структура библиотеки, data – данные получаемые из библиотеки, т.е. никаких void * userData нет.
1. Где создаётся и удаляется internalState? На нашей стороне?
2. В callback передаётся именно тот указатель internalState который был передан в addCallback?
I. Если на оба вопроса ответ да — то можно к нему прицепом нагрузить наши данные. То есть:
II. Если ответ да только на второй вопрос — то можно создать отображение из *internalState в наши данные, например unordered_map<void*, OurData> — и callback будет знать из какой ячейки доставать payload.
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.