Domanda

Durante un recente progetto a cui ho lavorato, ho dovuto usare molte funzioni che sembrano 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 refactorlo per assomigliare 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 del primo metodo. Ma ha senso creare PixelCoordinate e PixelSize classi? O starei meglio solo usando std::pair<int,int> per ciascuno. E ha senso avere un ZoomLevel classe, o dovrei solo usare un double?

La mia intuizione dietro l'uso di classi per tutto si basa su questi presupposti:

  1. Se ci sono lezioni per tutto, sarebbe impossibile passare a ZoomLevel in dove a Weight era previsto l'oggetto, quindi sarebbe più difficile fornire gli argomenti sbagliati a una funzione
  2. Allo stesso modo, alcune operazioni illegali causerebbero errori di compilazione, come l'aggiunta di un GPSCoordinate a a ZoomLevel oppure un'altra GPSCoordinate
  3. Le operazioni legali saranno facili da rappresentare e tysafe. cioè sottrarre due GPSCoordinates produrrebbe a GPSDisplacement

Tuttavia, la maggior parte del codice C ++ che ho visto usa molti tipi primitivi e immagino che ci debba essere una buona ragione per questo. È una buona idea usare gli oggetti per qualsiasi cosa, o ha aspetti negativi di cui non sono a conoscenza?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top