c ++: Jak uzyskać kontekst, gdy wywołanie zwrotne nie zapewnia arg użytkownika?

Po pierwsze, trochę tła:
(Uwaga: Chociaż jestem w środowisku innym niż Win32, jest to naprawdę pytanie C ++)

Korzystam z interfejsu API innego producenta, który wymaga zarejestrowania funkcji wywołania zwrotnego, aby wiedzieć, kiedy operacja asynchroniczna jest zakończona. Musisz użyć wywołania zwrotnego, nie ma możliwości obejścia go.

Implementacja spoza OOP byłaby następująca:

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

API_RegisterCallback(MyCbFcn);

Całkiem standardowe rzeczy.

ALE...
Mój kod to OOP, z wieloma instancjami wywołującymi wywołanie zwrotne, dlatego wywołanie zwrotne musi zostać przekierowane do obiektu, który go zarejestrował.

Wiedząc, że ludzie to robią, wywołania zwrotne zazwyczaj zawierają użytkownika var, coś w stylu:

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

API_RegisterCallback(MyCbFcn, someUserValue);

a dokładniej, w połączeniu z OOP, ten argument użytkownika pozwala na powrót do kontekstu:
(napisane w skrócie dla zwięzłości):

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 ...
   }
}

ALE, mój interfejs API nie zawiera użytkownika arg :(

Więc teraz moje pytanie:
Jak mogę wrócić do kontekstu?

Zastanawiałem się trochę nad tym, jak zdefiniować „pulę” 100 różnych wywołań zwrotnych i przypisać je w miarę tworzenia obiektów, ale wygląda to na prawdziwy hack.

Oczywiste rozwiązanie ... gdybym był np. W JavaScript :) ... byłoby używać funkcji anonimowej, ale AFAIK C ++ nie ma czegoś takiego.

Wszelkie pomysły zostaną docenione.

questionAnswers(1)

yourAnswerToTheQuestion