我有一个结构体,我想与任何类型的数字,但一些方法将只与浮动(这是期望的)。有没有什么方法可以输入一个只对浮点数起作用的方法?
假设我有这样的东西:
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的某些方法时得到一个错误。
1条答案
按热度按时间jdgnovmf1#
不,这不可能。仿制药不是这样工作的。