免责声明:这是为了爱好发展 - 除非被要求这样做,否则我不会在专业方面过度设计这项工作。
想象一个N维表面,例如线(1D),网格/圆(2D),立方体/球体(3D)等,其中该表面的每个轴都是有限的,因为它具有开始和结束,或环绕。一个很好的例子是地球,其中有经度(环绕),纬度(开始和结束),如有必要,还有高度和时间(假定这些具体的开始/结束)。
处理这种情况的通用结构可能是这样的:
typedef NoAxis End;
typedef Axis<End>::NoWrap<0, 365> Time; // one year, if units are in days
typedef Axis<Time>::NoWrap<0, 35000> Height; // sea level to 35k meters
typedef Axis<Height>::NoWrap<-90, 90> Latitude;
typedef Axis<Latitude>::Wrap<-180, 180> Longitude;
“Axis”类采用模板参数,即 next 轴;这形成了一个轴链,其中一个特殊类型“NoAxis”开始链。几何操作,例如找到两点之间的距离,通过累计每个轴的计算来执行。
我的问题:有没有办法,最好通过模板元编程,以编程方式找到可以乘以每个轴的极值的最大数量级 - 这个想法是最大化表面分辨率 - 但不会溢出用于包含值的类型的存储(例如,不要在32位系统上溢出32位等)。这个数量级必须考虑到计算表面上点之间的距离,这涉及找到平方距离。
再一次,找到这个数量级的原因是为给定的存储类型获得最高分辨率。