Alternative to std::function

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);
}
Calendar October 3, 2023 (Updated October 22, 2023)