El mejor enfoque para el polimorfismo estructural en C [cerrado]

Estoy escribiendo un simple objeto vectorial 2d. Tendrá componentes x e y, y métodos de longitud, producto cruzado, etc. La cosa es que quiero tener la estructura para tener muchos tipos posibles (char, int, float, double, etc.). Me preguntaba cuál sería la mejor opción, en cuanto al diseño, para interactuar con el objeto. Esto es lo que estoy considerando actualmente:

1. Haga que el usuario pase el objeto vectorial a funciones especializadas, como:

Vector2Dt_Dot(Vec2Dt* vector1, Vec2Dt* vector2);

donde 't' es el tipo del vector. Sin embargo, el problema con este enfoque es que no permite que diferentes tipos interactúen entre sí, por lo que no podría decir calcular el producto de puntos de un vector2d flotante y un vector2d doble. Un segundo enfoque, y hacia qué me estoy inclinando:

2. Haga que el usuario pase el (los) objeto (s) vectorial (es) como punteros de vacío, junto con sus tipos, como:

Vector2D_Dot(void* vector1, unsigned vector1_type, void* vector2, unsigned vector2_type);

Obviamente, este enfoque es más compacto en cuanto a API y también resuelve el problema anterior, pero a costa de algunos parámetros adicionales y seguridad de tipos.

Puede haber otras soluciones de las que no estoy al tanto, sin embargo, estas son las que actualmente estoy considerando. ¿Cuál crees que es el mejor enfoque para esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta