2012-11-29 39 views
4

當使用不同的庫時,我總是發現每個庫都有一個用於同一個「實際詞實體」的自定義類型。從C++的不同庫中自定義類型

說我有一個項目使用三維點,我只是使用OpenCv和PCL(點雲庫)的算法。我發現自己與這些類型的點:

  • Point3_爲OpenCV的
  • PointXYZ用於PCL
  • 三維點我的自定義類型

現在我的算法,我寫我的三維點,但我也想使用這些庫中的算法。將大集合中的每個點從一個類型轉換到另一個類型需要記憶和時間。

什麼是圍繞這種抽象的最佳方式?

+0

是他們二進制兼容? – 2012-11-29 14:56:29

+0

我不確定你的意思是二進制兼容,但我想答案是否定的:不同的sizeof,成員,填充...我可能需要某種形式的投射,但我期待着一些黑魔法。 – Pluc

+0

發佈所有三個結構的聲明 – 2012-11-29 15:16:18

回答

1

你可以做這樣的事情

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 相同然後修改算法取模板,而不是使用PX = ...使用

getx(p) = .. 
auto x = getx(p) 
+0

如果你很幸運,他們都有'[]' - 操作符重載,你甚至不需要這些'getx'包裝。 –