我是F#的新手,来自C ++背景。我正在尝试编写一个简单的向量类,该向量类可以是泛型类型(int,float等),但是我在使用默认构造函数时遇到了麻烦。我想将值初始化为零,但是要做到这一点,我需要以某种方式将具体的零转换为泛型,但是我不确定如何做到这一点。
也许一些代码可能会有所帮助。这是我到目前为止的内容:
type Vector3D<'T> (x :'T, y: 'T, z: 'T) =
member this.x = x
member this.y = y
member this.z = z
new() = Vector3D<'T>(0,0,0) // what goes here?
我已经在突出显示的行上尝试了很多东西,但是似乎无法使编译器感到满意。例如,我尝试过尝试Vector3D('T 0, 'T 0, 'T 0)
将int
零值转换'T
为零,但这是行不通的。
我是否缺少一些基本知识,或者仅仅是获得正确语法的一种情况?
这是使用内置通用零函数的解决方案:
type Vector3D<'T> (x : 'T, y: 'T, z: 'T) =
member this.x = x
member this.y = y
member this.z = z
let inline newVector () : Vector3D<_> =
let zero = Core.LanguagePrimitives.GenericZero
Vector3D(zero, zero, zero)
let v1 : Vector3D<int> = newVector ()
let v2 : Vector3D<double> = newVector ()
let v3 : Vector3D<int64> = newVector ()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句