Piszę prosty obiekt wektorowy 2D. Będzie zawierał komponenty X i Y oraz długość, krzyżowanie produktów itp. Chodzi o to, chcę mieć strukturę, aby mieć wiele możliwych typów (char, int, float, double, itp.). Zastanawiałem się, jaki byłby najlepszy wybór, by przemyślany projekt mógł wchodzić w interakcje z obiektem? Oto co mam obecnie rozważa:Najlepsze podejście do polimorfizmu struktury w C
1. Czy użytkownik przekazać obiekt wektorowy do wyspecjalizowanych funkcji, takich jak:
Vector2Dt_Dot(Vec2Dt* vector1, Vec2Dt* vector2);
gdzie „t” jest typem wektora. Jednak problem z tym podejściem polega na tym, że uniemożliwia on różne typy interakcji ze sobą, więc nie mogłem powiedzieć, obliczyć iloczynu punktowego wektora float2d i podwójnego wektora2d. Drugie podejście, a co ja pochylony w kierunku:
2. Czy użytkownik przekazać obiekt wektorowy (y) za nieważne wskaźniki, wraz z ich rodzajów, jak:
Vector2D_Dot(void* vector1, unsigned vector1_type, void* vector2, unsigned vector2_type);
Oczywiście podejście jest bardziej kompaktowe pod względem API i rozwiązuje powyższy problem, ale kosztem kilku dodatkowych parametrów i bezpieczeństwa typu.
Mogą istnieć inne rozwiązania, o których nie wiem, ale to są te, które obecnie rozważam. Jakie jest według ciebie najlepsze podejście?
@WhozCraig pytanie jest oznaczone 'C', nie' 'C++ –
Nie używaj' * 'void alternatywa; istnieje zbyt wiele sposobów popełniania błędów, których kompilator nie będzie przechwytywał (ponieważ dowolny typ wskaźnika może zostać przekonwertowany na 'void *', w C lub C++). W pewnym momencie to pytanie (w skrócie) miało znacznik C++ i przez dłuższy czas używało notacji typu referencyjnego C++. Jeśli C++ jest istotne, rozważ "wektor wektorowy">. –
@johnathan leffler: Tak, to był mój błąd. Często przełączam się pomiędzy C i C++. Zdecydowanie użyłbym interfejsu wektoropodobnego, gdyby była opcja w C. – Shokwav