При использовании разных библиотек я всегда обнаруживал, что у каждой есть свой тип для одной и той же «сущности реального слова».
Скажем, у меня есть проект, использующий точки в трех измерениях, я просто использую алгоритмы из OpenCv и PCL (Point Cloud Library). Я нашел себя с этими типами для точки:
Теперь у меня есть алгоритмы, которые я написал для своего Point3d, но я также хочу использовать алгоритмы из этих библиотек. Преобразование каждой точки в большом наборе из одного типа в другой, назад и вперед, требует памяти и времени.
Что было бы лучшим способом иметь какую-то абстракцию вокруг этого?
Вы могли бы сделать что-то вроде этого
template<class T>
struct Getter{
};
template<class T>
struct Getter<Point3_<T>>{
typedef T& type;
static type getx(Point3_<T>& p){
return p.x;
}
};
template<>
struct Getter<PointXYZ>{
typedef float& type;
static type getx(PointXYZ& p){
return p.x;
}
};
template <class T>
point_x(T& p) -> Getter<T>::type{
return Getter<T>::getx(p);
}
Сделайте то же самое для y и z
Затем измените ваши алгоритмы, чтобы взять шаблон и вместо использования p.x = … используйте
getx(p) = ..
auto x = getx(p)
Других решений пока нет …