F#:强制转换为通用类型

我是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为零,但这是行不通的。

我是否缺少一些基本知识,或者仅仅是获得正确语法的一种情况?

韦斯利·威瑟(Wesley Wiser)

这是使用内置通用零函数的解决方案:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

F#:强制转换为通用类型

来自分类Dev

F#强制转换为在编译时未知的类型

来自分类Dev

Scala强制转换为通用类型(用于通用数值函数)

来自分类Dev

将枚举转换为F#中的列表或序列或通用集合类型

来自分类Dev

将对象强制转换为通用类型失败

来自分类Dev

F#将obj [,]强制转换为float [,]

来自分类Dev

转换为通用类型

来自分类Dev

转换为通用类型

来自分类Dev

为什么将通用返回类型强制转换为另一个通用类型?

来自分类Dev

强制转换为通用类型(T)会发出“未经检查的强制转换”警告

来自分类Dev

将未知对象强制转换为接口的通用接口(来自最初的显式通用类型,通用集合类型的类型)

来自分类Dev

F#如何转换通用

来自分类Dev

转换类型 F#

来自分类Dev

将[AnyObject]强制转换为可能是或可能不是集合类型的通用类型

来自分类Dev

向下转换为通用类型

来自分类Dev

动态转换为通用类型

来自分类Dev

向下转换为通用类型

来自分类Dev

强制转换为Java类型

来自分类Dev

将通用T强制转换为Object []

来自分类Dev

将通用T强制转换为Object []

来自分类Dev

F#将自定义类型转换/转换为原始类型

来自分类Dev

约束通用类型以继承f#中的通用类型

来自分类Dev

F#数值类型转换

来自分类Dev

F#中的类型转换

来自分类Dev

F#中严格的通用枚举转换

来自分类Dev

是否存在具有类型推断的F#强制转换函数,例如Seq.cast?

来自分类Dev

将作为通用类型参数的运行时Dictionary <K,V>强制转换为其正确的编译时类型

来自分类Dev

在Java中动态转换为通用类型

来自分类Dev

从字符串转换为通用类型

Related 相关文章

热门标签

归档