gpt4 book ai didi

generics - 如何从泛型函数中调用最精确的重载?

转载 作者:行者123 更新时间:2023-11-28 07:12:30 24 4
gpt4 key购买 nike

This guy说 Swift 泛型方法可以重载作为一种特殊化它们的方式:

func testMethod<T: Comparable>(v: T) -> T {
return v
}
func testMethod(v: Int) -> Int {
return v * 12345
}

所以我试图得到一些类似的东西。我做了一个类来从字节缓冲区读取整数。它特别定义了这些方法:

public func read(type: Int32.Type) -> Int32 {
return /* implementation detail */
}

public func read<T: IntegerType>(type: T.Type) -> T {
let bug: T! = nil
return bug
}

public func readInto<T: IntegerType>(inout into: T) {
into = read(T.self)
}

还有很多read(type: [U]Int[bits])重载 read<T> 的方法方法。如果我尝试从非泛型实现未涵盖的类型中读取数据,则泛型方法可以作为万能的方法使我的程序崩溃。

readInto method 是一种方便的方法,因此我不必重复对象的类型。如果我想读入 Int32变量,而不是做 variable = reader.read(type: Int32.self) ,我能做到reader.read(&variable) ,因为我不想重复自己,所以我觉得这样更好。

我的问题是来自 readInto 的电话系统地去包罗万象read<T> ,即使存在更精确的过载。

有没有办法让它从泛型方法中调用最精确的重载?

最佳答案

这并没有解决一般问题,但是 Swift 函数可以从它们的返回类型重载。例如:

func foo() -> Int16 {
return 0
}

func foo() -> Int32 {
return 1
}

let i16: Int16 = foo() // 0
let i32: Int32 = foo() // 1
let i = foo() // compile-time error: ambiguous

这实际上意味着我不需要 readInto方法读入给定类型的变量,我可以将 read() 的结果分配给它调用并完成它,该死的泛型。

关于generics - 如何从泛型函数中调用最精确的重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27880469/

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