例如,我有几个现有的2D(二维)和3D案例的点类,如class Point2D
和class Point3D
。我希望它像template<int D> class Point
那样被模板化,其中Point<2>
是等价的,或者直接使用Point2D
和Point<3>
等价或直接使用Point3D
。我不想重新实现那些现有的类,因为我的真正的类不像类点那么简单,它是第三方代码,比如
using Point<2> = Point2D;
using Point<3> = Point3D;
有什么办法吗?
答案 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;