c ++: ¿Cómo obtener un contexto cuando la devolución de llamada no proporciona arg del usuario?

Primero, algunos antecedentes:
(Nota: Aunque estoy en un terreno que no es de .NET para Win32, esta es realmente una pregunta de C ++)

Estoy usando una API de terceros que requiere que registres una función de devolución de llamada para saber cuándo se completa una operación asíncrona. Tengo que usar la devolución de llamada, no hay manera de evitarlo.

Una implementación que no sea OOP sería algo como esto:

void __stdcall MyCbFcn(int value)
{
   do something with 'value'...
}

API_RegisterCallback(MyCbFcn);

Cosas bastante estándar.

PERO...
Mi código es OOP, con varias instancias actualizando la devolución de llamada, por lo tanto, la devolución de llamada debe dirigirse al objeto que la registró.

Sabiendo que la gente hace esto, las devoluciones de llamada suelen incluir una var de usuario, algo así como:

void __stdcall MyCbFcn(int value, U32 user)
{
   do something with 'value'...
}

API_RegisterCallback(MyCbFcn, someUserValue);

y más específicamente, cuando se combina con OOP, este argumento de usuario le permite volver al contexto:
(Escrito en línea por brevedad):

class MyClass
{
public:
   MyClass()
   {
      API_RegisterCallback(MyClass::StaticCbFcn, (U32)this);
   }

private:
   static void __stdcall StaticCbFcn(int value, U32 user)
   {
      MyClass* pThis = (MyClass*)user;
      pThis->InstanceCbFcn(value);
   }
   void InstanceCbFcn(int value)
   {
      ... do some work in context ...
   }
}

PERO, mi API no presenta un usuario arg :(

Así que ahora mi pregunta:
¿Cómo puedo volver al contexto?

He considerado cosas un tanto incompletas, como definir un "grupo" de 100 devoluciones de llamada distintas y asignarlas a medida que se crean objetos, pero eso parece un verdadero truco.

Una solución obvia ... si estuviera en e.g. JavaScript :) ... sería usar una función anónima, pero AFAIK C ++ no tiene nada de eso.

Cualquier idea sería apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta