#include #include "shape.h" struct shape { void *obj; shape_area_t area; shape_destroy_t destroy; }; double shape_area(struct shape *shape) { return shape->area(shape->obj); } void shape_destroy(struct shape *shape) { shape->destroy(shape->obj); free(shape); } struct shape *shape_create( void *obj, shape_area_t area, shape_destroy_t destroy) { struct shape *shape = malloc(sizeof(shape)); shape->obj = obj; shape->area = area; shape->destroy = destroy; return shape; }