Implementación de devolución de llamada (para la biblioteca C) como virtual puro en la clase abstracta C ++

Me encontré con un problema al usar una biblioteca de audio en C(PortAudio creó con ASIO SDK, pero esto no es realmente relevante para esta pregunta; los detalles técnicos solo me impedirían hacer la pregunta).

En pocas palabras, una determinada función C de esa biblioteca requiere que le dé una función de devolución de llamada que devuelva un determinado valor y acepte ciertos parámetros; Para mayor claridad, digamos que la devolución de llamada debe tener este aspecto:

int callback(int arg)

y la llamada a la función de biblioteca se ve así:

theCLibraryFuntion(foo, bar, callback);

El uso de la biblioteca de esta manera (es decir, en la forma de estilo C del procedimiento) funciona bien, pero me gustaría ajustar las funcionalidades de la biblioteca que son relevantes para mí en clases de C ++ bien estructuradas. El proyecto para el que necesito la biblioteca es el más grande en el que he trabajado hasta ahora, por lo que OO-design es una necesidad para mí.Quiero crear una clase abstracta en C ++ que proporcione una función virtual pura para que las clases derivadas la implementen, y luego hacer que esa implementación sea utilizada para la devolución de llamada por una clase que conoce la biblioteca. En otras palabras, necesito un polimorfismo real en lugar de una función desagradable.

No he podido escribir tales clases hasta ahora. El compilador no me permitirá pasar funciones miembro no estáticas de ninguna clase como devolución de llamada a la función de biblioteca C. Entiendo por qué, pero me gustaría saber sobre alguna solución para esto. Mientras exista esa solución, si existe, me da un comportamiento polimórfico para las clases de front-end, no me importa lo malvado que se vuelva el código de back-end. Si no existe tal solución, que así sea. Entiendo bastante bien cómo funciona C en segundo plano, pero sé poco sobre los aspectos técnicos de las características de OO en C ++, así que voy a suponer que hay una manera.

¡Gracias por adelantado!

Nota: es probable que una solución que agregue una sobrecarga considerable no tenga ningún valor para mí. Me veo forzado a usar esta biblioteca de C portaudio porque es la única API que me da la latencia extremadamente baja para la transmisión de audio que requiere mi proyecto, por lo que el aumento drástico de gastos no es realmente una opción.

Respuestas a la pregunta(2)

Su respuesta a la pregunta