Generic Function Pointer
From C
#include <stdio.h>
struct add_ctx {
int a;
int b;
int c;
};
int add(int a, int b, int c) {
return a + b + c;
}
typedef int add_func(int a, int b, int c);
struct sub_ctx {
int a;
int b;
};
int sub(int a, int b) {
return a - b;
}
typedef int sub_func(int a, int b);
enum {
ADD_FUNC,
SUB_FUNC
};
typedef void void_f(void);
int call_function(int type, void_f *p, void *ctx_) {
switch(type) {
case ADD_FUNC: {
add_func *add = (add_func *) p;
struct add_ctx *ctx = ctx_;
return add(ctx->a, ctx->b, ctx->c);
}
case SUB_FUNC: {
sub_func *sub = (sub_func *) p;
struct sub_ctx *ctx = ctx_;
return sub(ctx->a, ctx->b);
}
}
return 0;
}
int main(void) {
int sum;
struct add_ctx add_ctx = { 1, 2 , 3};
sum = call_function(ADD_FUNC, (void_f *) &add, &add_ctx);
printf("add: %d\n", sum);
struct sub_ctx sub_ctx = { 1, 2};
sum = call_function(SUB_FUNC, (void_f *) &sub, &sub_ctx);
printf("sub: %d\n", sum);
return 0;
}
.
