例如,我有几个现有的2D(二维)和3D情况的点类,比如class Point2D
和class Point3D
.我希望它是模板像template
这里Point<2>
相当于或直接使用Point2D
与Point<3>
等同于或直接使用Point3D
.我不想重新实现那些现有的类,因为我的真正的类不像类点那么简单,它是第三方代码,比如
using Point<2> = Point2D; using Point<3> = Point3D;
有办法吗?
当然!不要修改类,而是添加typedef:
templatestruct pointType_; template <> struct pointType_<2> { using type = Point2D; }; template <> struct pointType_<3> { using type = Point3D; }; template using Point = typename pointType_ ::type;