Go语言 泛型方法是否可以只处理类型化泛型的子集?

20jt8wwn  于 2023-06-19  发布在  Go
关注(0)|答案(1)|浏览(117)

我有一个结构体,我想与任何类型的数字,但一些方法将只与浮动(这是期望的)。有没有什么方法可以输入一个只对浮点数起作用的方法?
假设我有这样的东西:

type Number interface {
    Integer | Float
}

type Integer interface {
    uint | uint8 | uint16 | uint32 | uint64 | int | int8 | int32 | int64
}

type Float interface {
    float32 | float64
}

我有一个struct定义为:

type MyStruct[T Number] struct {
    Data []T
}

我想要一个只适用于float的方法:

func (ms MyStruct[T]) SomeMethod() MyStruct[T] {
    result := ms.Clone()
    for i, v := range result.Data {
        result.Data[i] = helper[Float](v)
    }
    return result
}

func helper[T Float] (v T) T {
    return v*v
}

我希望SomeMethod只在“T”是“Float”类型泛型时工作。这在Go中的泛型中可能吗?
或者更正式的东西,比如,给定类型MyStruct是用MyStruct[Float 32]{}或MyStruct[float 64]{}示例化的,允许调用者调用“SomeMethod”,否则,给出一个类型错误。
我也愿意用其他方式来做这件事,但这是我想做的。我正在写一个tensor library。我需要整型和浮点数,以及一些只处理浮点数的方法。我可以用整型数来实现它,但这并没有什么意义。我宁愿用户在尝试使用int的某些方法时得到一个错误。

jdgnovmf

jdgnovmf1#

不,这不可能。仿制药不是这样工作的。

相关问题