2017-01-24 64 views
-1

例如,我有幾個2D(二維)和3D案例的現有點類,如class Point2Dclass Point3D。我希望它被模板化爲template<int D> class Point,其中Point<2>等效或直接使用Point2DPoint<3>等效或直接使用Point3D。我不想重新實現這些現有的類,因爲我真正的類是沒有階級觀點一樣簡單,這是第三方代碼,就像如何使現有的類成爲類模板?

using Point<2> = Point2D; 
using Point<3> = Point3D; 

任何方式做到這一點?

+0

你不重新實現,你重構。您的模板類成爲基礎併爲PointND提供了一些通用方法,派生類可以添加專門化 – AndyG

+0

您應該發佈代碼。 –

+0

我想說這完全取決於這兩個類目前的樣子。應使用實際類的代碼將 –

回答

3

使用模板特殊化:

template <int> struct PointImpl; 
template <> struct PointImpl<2> { using Type = Point2D; }; 
// ... 

template <int D> using Point = typename PointImpl<D>::Type; 
8

當然!不要修改類,添加一個typedef來代替:

template <int D> 
struct pointType_; 

template <> 
struct pointType_<2> { using type = Point2D; }; 

template <> 
struct pointType_<3> { using type = Point3D; }; 

template <int D> 
using Point = typename pointType_<D>::type; 
相關問題