gpt4 book ai didi

swift - 如何在 Swift 中实现泛型转换初始化器?

转载 作者:可可西里 更新时间:2023-11-01 02:16:30 25 4
gpt4 key购买 nike

<分区>

我正在 Swift 中实现一个 2D 向量结构:

public struct Vec2<T: Numeric> {
public let x: T
public let y: T

public init(_ x: T, _ y: T) {
self.x = x;
self.y = y;
}

// ...
}

public protocol Numeric: Equatable {
// ...
}

extension Int: Numeric {}
extension Double: Numeric {}
extension Float: Numeric {}

此代码编译。现在我想添加一个 conversion initializer 以允许转换,例如一个Vec2<Int>Vec2<Float> .我将此添加到 Vec2 :

    public init<T2: Numeric>(_ other: Vec2<T2>) {
self.x = T(other.x)
self.y = T(other.y)
}

以及 Numeric 所需的初始值设定项协议(protocol):

    init(_: Int)
init(_: Double)
init(_: Float)

但是,这会导致我无法解决的错误:

cannot invoke initializer for type 'T' with an argument list of type '(T2)'

overloads for 'T' exist with these partially matching parameter lists: (Int), (Double), (Float)

有什么想法吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com