我有一些我正在尝试重构的模板代码。具体来说,它是一种几何类型,以参数维度为模板(因此它可以表示曲线、曲面、体积、超体积等)以及点类型。
问题在于,以这种通用方式进行编辑变得非常笨拙,而且大多数时候我们只使用参数维度 1、2 和 3。部分专业化是这些天唯一改变的东西,共享代码相当稳定和完整。
除了编辑代码的困难之外,还有一些性能问题源于必须以一种推广到任意维度网格的方式存储内部数据。可以以通用方式缓解性能问题,但是这只会继续增加许多不必要的复杂性。基本上问题是模板过于笼统。
因此,我将用 3 个单独的模板替换通用模板代码,每个维度一个。我还想保留点类型的模板,所以我不想只使用普通类。
如果我已经用宏和#include 文件多次模板化 C 方式,我可以通过预处理器运行输入并获得我想要的 3 个不同版本。
虽然我可以手动完成,但我更喜欢自动化解决方案,至少作为起点。
C++ 是否存在任何类似的方法或重构解决方案,以获取具有特定输入的模板的源代码?
更具体地说,我有这样的代码:
template< int Dimension, class PointType > class Nurbs { ... }
template< class PointType > class NurbsCurve : public Nurbs< 1, PointType > { ... }
template< class PointType > class NurbsSurface : public Nurbs< 2, PointType > { ... }
template< class PointType > class NurbsVolume : public Nurbs< 3, PointType > { ... }
但我想最终得到这样的代码:
template< class PointType > class NurbsCurve { ... }
template< class PointType > class NurbsSurface { ... }
template< class PointType > class NurbsVolume { ... }