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; }
.