Во время недавнего проекта, над которым я работал, мне пришлось использовать множество функций, которые выглядят примерно так:
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ожидался объект, поэтому было бы сложнее предоставить неправильные аргументы функции - Аналогично, некоторые недопустимые операции могут вызвать ошибки компиляции, такие как добавление a
GPSCoordinateкZoomLevelдругому или другому.GPSCoordinate - Легальные операции будут легко представлять и безопасны. т.е. вычитание двух
GPSCoordinates дастGPSDisplacement
Однако большая часть кода C ++, который я видел, использует много примитивных типов, и я полагаю, что для этого должна быть веская причина. Это хорошая идея использовать объекты для чего-либо, или у него есть недостатки, о которых я не знаю?