On Monday, 1 October 2018 at 20:27:43 UTC, spikespaz wrote:
Of course there is nothing wrong with defining each callback as a separate function, but then comes the issue of naming them. I also don't like the way it makes my code look.

I think the best you can do is something like this:

---
auto callback(T, string file = __FILE__, size_t line = __LINE__)(T handler) {
  import std.traits;

  __gshared T handler_;
  handler_ = handler;

  extern(Windows)
  ReturnType!T fn(Parameters!T args) {
    synchronized return handler_(args);
  }

  return &fn;
}

void main() {
  HWND[] list;
  EnumWindows((HWND hwnd, LPARAM lparam) {
    list ~= hwnd;
    return TRUE;
  }.callback(), 0);
  writeln(list);
}
---

Reply via email to