Während eines Projekts, an dem ich kürzlich gearbeitet habe, musste ich viele Funktionen verwenden, die so aussehen:
static bool getGPS(double plane_latitude, double plane_longitude, double plane_altitude,
double plane_roll, double plane_pitch, double plane_heading,
double gimbal_roll, double gimbal_pitch, double gimbal_yaw,
int target_x, int target_y, double zoom,
int image_width_pixels, int image_height_pixels,
double & Target_Latitude, double & Target_Longitude, double & Target_Height);
Ich möchte es so umgestalten, dass es ungefähr so aussieht:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
Dies scheint mir deutlich lesbarer und sicherer zu sein als die erste Methode. Aber macht es Sinn, zu erstellen PixelCoordinate
und PixelSize
Klassen? Oder wäre ich besser dran, wenn ich nur std::pair<int,int>
für jedes verwenden würde? Und macht es Sinn, eine ZoomLevel
Klasse zu haben , oder sollte ich einfach eine verwenden double
?
Meine Intuition, Klassen für alles zu verwenden, basiert auf diesen Annahmen:
- Wenn es Klassen für alles gibt, ist es unmöglich,
ZoomLevel
einWeight
Objekt an die Stelle zu übergeben, an der es erwartet wurde. Daher ist es schwieriger, einer Funktion die falschen Argumente zu geben - Ebenso führen einige illegale Vorgänge zu Kompilierungsfehlern, z. B. das Hinzufügen von a
GPSCoordinate
zu einemZoomLevel
oder einem anderenGPSCoordinate
- Rechtsgeschäfte sind einfach darzustellen und typensicher. dh zwei
GPSCoordinate
s zu subtrahieren, würde a ergebenGPSDisplacement
Der meiste C ++ - Code, den ich gesehen habe, verwendet jedoch viele primitive Typen, und ich stelle mir vor, dass es dafür einen guten Grund geben muss. Ist es eine gute Idee, Objekte für irgendetwas zu verwenden, oder hat es Nachteile, die ich nicht kenne?