【发布时间】:2017-04-17 07:57:02
【问题描述】:
我试图通过定义一次运算符来减少某些向量类型的重复,但我不确定这是否可能。这似乎是最有前途的方法:
open class VecN<Derived: VecN<Derived>>(val buffer: FloatArray) {
operator fun minus(other: Derived) = Derived(buffer.zip(other.buffer, { a, b -> a - b }).toFloatArray())
operator fun plus(other: Derived) = Derived(buffer.zip(other.buffer, { a, b -> a + b }).toFloatArray())
... many more operators...
}
class Vec2(x: Float, y: Float) : VecN<Vec2>(floatArrayOf(x, y))
class Vec3(x: Float, y: Float, z: Float) : VecN<Vec3>(floatArrayOf(x, y, z))
class Vec4(x: Float, y: Float, z: Float, w: Float) : VecN<Vec4>(floatArrayOf(x, y, z, w))
这给了我“类型参数 Derived 不能被称为函数”,我尝试在其中构造我的 Derived 返回值。
在 Kotlin 中可以实现这一点吗?
【问题讨论】:
标签: kotlin