Під час нещодавнього проекту, над яким я працював, мені довелося використовувати багато функцій, які виглядають так:
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);
Тому я хочу переробити його так, щоб виглядати приблизно так:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
Мені здається, це значно читабельніше та безпечніше, ніж перший метод. Але чи є сенс створювати PixelCoordinate
та проводити PixelSize
заняття? Або мені було б краще просто використовувати std::pair<int,int>
для кожного. І чи є сенс мати ZoomLevel
клас, чи я просто повинен використовувати клас double
?
Моя інтуїція використання класів для всього ґрунтується на цих припущеннях:
- Якщо для всього класу є класи, неможливо було б передати
ZoomLevel
туди, деWeight
очікували об'єкт, тому було б складніше надати неправильні аргументи функції - Так само деякі незаконні операції можуть спричинити помилки компіляції, такі як додавання
GPSCoordinate
до тогоZoomLevel
чи іншогоGPSCoordinate
- Юридичні операції легко представити та надати безпеку. тобто віднімання двох
GPSCoordinate
s дало б aGPSDisplacement
Однак більшість кодів C ++, які я бачив, використовує безліч примітивних типів, і я думаю, що це має бути вагомою причиною. Це гарна ідея використовувати предмети для чого-небудь, чи у неї є недоліки, про які я не знаю?