如何使现有的类成为类模板?

时间:2017-01-24 15:39:08

标签: c++ c++11 templates

例如,我有几个现有的2D(二维)和3D案例的点类,如class Point2Dclass Point3D。我希望它像template<int D> class Point那样被模板化,其中Point<2>是等价的,或者直接使用Point2DPoint<3>等价或直接使用Point3D。我不想重新实现那些现有的类,因为我的真正的类不像类点那么简单,它是第三方代码,比如

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

有什么办法吗?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:3)

使用模板专业化:

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

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