Как использовать C ++ функция-член как функция обратного вызова для платформы C

Существует библиотека C (которую я не могу изменить), которая поддерживает функцию обратного вызова типа

void (*callback)(void *appContext, int eventid)

. Я хочу установить функцию C ++ в качестве функции обратного вызова.

В частности, у меня есть следующие вопросы:

  1. Нужно ли мне объявлять функцию обратного вызова в блоке «extern C» ?

  2. Должна ли функция-член быть статической, чтобы быть функцией обратного вызова? Можно ли использовать нестатическую функцию-член? Если да, то как? И когда рекомендуется использовать нестатическую функцию-член?

  3. Имеет ли значение, является функция функцией шаблона или нет?

  4. Имеет ли функция стиля C, не являющаяся классом, какие-либо преимущества перед функцией-членом класса?

Я пробую эти варианты на старом компиляторе VC ++, который не поддерживает последний стандарт C ++. Но код должен быть независимым от платформы и работать с большинством компиляторов C ++. Я хочу знать, что рекомендуется делать с обратными вызовами?

14
задан Oak Bytes 1 October 2017 в 08:30
поделиться