上QQ阅读APP看书,第一时间看更新
6.8 类型参数化
对于有成员结构的类型,往往需要限定内部成员的类型。但很多时候,在结构内部进行类型限定时会使复合类型的适用性受到限制。为了不放弃类型的限定条件,又适应灵活的类型使用场景,便有了对类型进行参数化的需求。
例如,需要定义一个坐标点类型,会有一维、二维、三维等情况;而每一维的类型可以是Int8、Int64,也可以是Float32、Float64等。如果有严格的类型限定,需要针对不同的类组合定义很多具体的复合类型,而且一旦需要为这些类型定义操作函数,也会需要众多的实现方法。这种做法不但导致代码量骤增,维护起来也很麻烦。
为此,我们需要对概念进行抽象。例如,可定义一个无维度限定的名为Pointy的抽象类型,为所有的点类型定义统一的接口函数;然后再定义一维点Point1D、二维点Point2D及三维点Point3D等复合类型,针对不同维度定义相应的操作方法。在确定成员类型时,将成员的类型作为参数,交由外部调用方控制。