Wie kann ich mich übergeben, ein C++ - lambda-um einen C-callback, der erwartet, dass ein Funktionszeiger und ein Kontext?

Ich versuche, registrieren Sie einen Rückruf in einer C-API, die verwendet die standard-Funktion-Zeiger+Kontext-Paradigma. Hier ist, was die api sieht wie folgt aus:

void register_callback(void(*callback)(void *), void * context);

Was ich wirklich gerne tun, ist in der Lage, registrieren Sie einen C++ - lambda als der Rückruf. Darüber hinaus möchte ich die lambda sein, eine, die erobert hat-Variablen (dh. kann nicht konvertiert werden, um eine gerade stateless std::function)

Welche Art von adapter code brauche ich, um schreiben zu können, registrieren Sie einen lambda-Ausdruck als callback?

  • während std::function<T> ist eine Art erasure-Mechanismus, der Lage, der einen lambda-Ausdruck, es ist nicht die lambda
  • Das ist fair. Habe die dicrepancy Sie daran hindern, die Frage zu verstehen? Gibt es da eine Möglichkeit, ich kann ihn neu schreiben?
  • es könnte sein, dass ich noch nicht gegeben, die Frage weiter gedacht, um ganz ehrlich mit Ihnen, aber Sie umschreiben könnte sagen, dass Sie müssen ziehen Sie den Funktionszeiger aus std::function<> lieber als aus einer lambda
  • Das hört sich großartig an. Gibt es eine Möglichkeit, ziehen Sie einen Rahmen dabei heraus? Eine Art von Zustand, ich konnte gehen, wie die Kontext-Zeiger auf die C-api?
Schreibe einen Kommentar