Обертка пользовательских типов из разных библиотек в Stack Overflow

При использовании разных библиотек я всегда обнаруживал, что у каждой есть свой тип для одной и той же «сущности реального слова».

Скажем, у меня есть проект, использующий точки в трех измерениях, я просто использую алгоритмы из OpenCv и PCL (Point Cloud Library). Я нашел себя с этими типами для точки:

  • Point3_ для OpenCv
  • PointXYZ для PCL
  • Point3d мой пользовательский тип

Теперь у меня есть алгоритмы, которые я написал для своего Point3d, но я также хочу использовать алгоритмы из этих библиотек. Преобразование каждой точки в большом наборе из одного типа в другой, назад и вперед, требует памяти и времени.

Что было бы лучшим способом иметь какую-то абстракцию вокруг этого?

4

Решение

Вы могли бы сделать что-то вроде этого

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)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]