Durante un recente progetto a cui ho lavorato, ho dovuto usare molte funzioni che assomigliano a questo:
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);
Quindi voglio riformattare in modo che assomigli a questo:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
Questo mi sembra significativamente più leggibile e sicuro rispetto al primo metodo. Ma ha senso creare PixelCoordinate
e PixelSize
classi? O starei meglio usando solo std::pair<int,int>
per ognuno. E ha senso tenere una ZoomLevel
lezione, o dovrei semplicemente usare una double
?
La mia intuizione dietro l'utilizzo delle classi per tutto si basa su questi presupposti:
- Se ci sono classi per tutto, sarebbe impossibile passare un punto
ZoomLevel
in cuiWeight
era previsto un oggetto, quindi sarebbe più difficile fornire gli argomenti sbagliati a una funzione - Allo stesso modo, alcune operazioni illegali causerebbero errori di compilazione, come l'aggiunta di una
GPSCoordinate
aZoomLevel
o un'altraGPSCoordinate
- Le operazioni legali saranno facili da rappresentare e da scrivere. cioè sottraendo due
GPSCoordinate
s si otterrebbe aGPSDisplacement
Tuttavia, la maggior parte del codice C ++ che ho visto utilizza molti tipi primitivi e immagino che ci debba essere una buona ragione per questo. È una buona idea usare oggetti per qualcosa o ha degli aspetti negativi di cui non sono a conoscenza?