функция. У нее есть коллбек, который выглядит вот так
int(*)(void *opaque, uint8_t *buf, int buf_size),
Но я хочу ее вызывать для каждого экземпляра класса, который в отдельном потоке. Ну и, соответственно, нужно как-то скормить туда функцию из класса
int Demuxer::readBufferCallback(void* opaque, uint8_t* buf, int buf_size)
очевидно хватаю ошибку
Error C2664 'AVIOContext *avio_alloc_context(unsigned char *,int,int,void *,int (__cdecl *)(void *,uint8_t *,int),int (__cdecl *)(void *,uint8_t *,int),int64_t (__cdecl *)(void *,int64_t,int))':
cannot convert argument 5 from
'int (__cdecl Demuxer::* )(void *,uint8_t *,int)' to 'int (__cdecl *)(void *,uint8_t *,int)'
Ну в общем да, к сожалению, этой штуке нельзя присвоить какой-то произвольный функциональный объект, вроде лямбды с состоянием. А что такое opaque? Это какой-то системный объект, или пользовательский?
оборачиваете вашу member функцию в лямбду без захватов с требуемой сигнатурой. такую лямбду можно приводить к указателю на функцию в avio_alloc_context передаете this как opaque аргумент в лямбде делаете static_cast в указатель на ваш класс и вызываете вашу member функцию
Обсуждают сегодня