Короткий ответ, вы не можете.
Длинный ответ:
Учитывая достаточную свободу действий API, которую вам нужно позвонить, вы можете настроить функцию, которую вы просто регистрируете, и звоните в качестве посредника. Обычно функции обратного вызова позволяют включать дополнительные данные, которые передаются этой функции вместе с информацией, сгенерированной объектом, вызывающим обратный вызов. Обычно он называется чем-то вроде «client_data» и имеет тип void * или long. Если это так, вы можете просто использовать эти данные, чтобы включить достаточную информацию для вызова функции, которую вы хотите, в нужном экземпляре, например, в режиме boost :: function & lt;>.
Обратите внимание, что этот посредник функция, которая делегирует вашу функцию-член, может быть статическим членом или свободной функцией.
К сожалению, у вас нет этой опции, так что ваша работа будет вдвойне жесткой. Вам действительно нужен какой-то способ убедиться, что этому правильному экземпляру присваивается сообщение, и вам не удастся определить этот экземпляр из данных обратного вызова. Есть несколько вариантов, которые могут или не могут работать для вас:
В заключение, нет прямого способа сделать то, что вы хотите, но могут быть ответы на получение того, что вам нужно, если вы рассмотрите варианты. Любая функция, используемая в качестве обратного вызова, предоставляемая функции API C, должна ссылаться как указатель на функцию, а не на указатель на элемент любого рода ... и, к сожалению, не является также и функтором. C не знает, как справляться с этими вещами, поэтому ваш обратный вызов должен быть свободной функцией или статическим членом.