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