void* genericity is how C libraries achieve reuse without templates: qsort's comparator, the Linux kernel's container_of-based lists, and glib's GList all use the pattern you are building. It teaches the exact type-erasure tradeoff that C++ templates and Rust generics were invented to fix.