Swift 2 generics and derived types
Swift 2 generics and derived types
- Subject: Swift 2 generics and derived types
- From: Rick Mann <email@hidden>
- Date: Wed, 24 Jun 2015 12:19:18 -0700
I've been experimenting with Swift 2, and have started writing a generic Vector3<T> class. It looks something like this:
-----
protocol
VectorElementType: IntegerLiteralConvertible
{
func +(a: Self, b: Self) -> Self
}
struct
Vector3<T where T: VectorElementType>
{
init()
{
x = 0;
y = 0;
z = 0;
}
init(_ inX: T, _ inY: T, _ inZ: T)
{
x = inX
y = inY
z = inZ
}
var x: T
var y: T
var z: T
}
func
+<T>(inLeft: Vector3<T>, inRight: Vector3<T>)
-> Vector3<T>
{
return Vector3<T>(inLeft.x + inRight.x, inLeft.y + inRight.y, inLeft.z + inRight.z)
}
extension Float: VectorElementType {}
extension Double: VectorElementType {}
typealias Vector3f = Vector3<Float>
typealias Vector3d = Vector3<Double>
-----
The thing I'd like to do is let the + operator support two different types of Vector3, such that if the individual VectorElementTypes are addable together (either because a + operator exists for both types, or because one type can be promoted to a type that can add), then it all "just works".
In C++, this works because template instantiation happens when the types are introduced, but in Swift, I have to promise that the types will work out that way. But I've not figured out how.
E.g., I can't do this:
var a = Vector3d(1, 2, 3)
var b = Vector3f(4, 5, 6)
var c = a + b
How might I accomplish this? Thanks!
--
Rick Mann
email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden