Alternative to std::function
Based on Omar’s tweet https://twitter.com/ocornut/status/1709138967415640118
#include <stdio.h>
struct Callback {
void (*func)(void *data, int arg);
void *data;
};
void call(Callback callback, int arg) {
callback.func(callback.data, arg);
}
template<typename F>
void unwrap_call(void *user, int arg) {
F *f = (F *)user;
(*f)(arg);
}
template<typename F>
Callback as_callback(F* f) {
return (Callback) {
.func = unwrap_call<F>,
.data = (void *)f
};
}
void test(Callback callback, int times) {
for (int i = 0; i < times; i++) {
call(callback, i);
}
}
int main(int argc, char **argv) {
auto lambda = [&](int i) { printf("%s\n", argv[i]); };
test(as_callback(&lambda), argc);
}