← Back to context

Comment by pjmlp

4 days ago

Or I don't know, just use C++ lambdas instead?

You can't turn a capturing C++ lambda into a WNDPROC, which is an ordinary function pointer. You'd still have to ferry the lambda via a context pointer, which is what this blog post and the other solutions in the comments are all about.

  • You kind of can, that is one of their design points, naturally you need to move the context into the body and know what to cast back from.

    I guess I need to prove a point on my Github during next week.

    • If you mean that you can call a C++ lambda from a static C callback via a context pointer, of course you can do that, it's not very mind-boggling. Rust FFI libraries similarly have to do that trick all the time to turn a closure into a C callback. The primary problem with WNDPROC is how to get that context pointer in the first place, which is the part that OP and everyone in the comments are talking about.