gpt4 book ai didi

swift - 是否可以从 Any 类型中获取他的 UnsafeRawPointer 和长度?

转载 作者:行者123 更新时间:2023-11-28 13:22:37 26 4
gpt4 key购买 nike

我只想调用C函数

static  inline  uint64_t  wyhash(const void* key,  uint64_t  len, uint64_t  seed)

像这样来自 Swift

func hash<T: Any>(key: T, seed: UInt64) -> UInt64 { wyhash(...) }

这可能吗?以及如何?

最佳答案

要计算大小,请使用 MemoryLayout:

func hash<T>(key: T, seed: UInt64) -> UInt64 {
let len = UInt64(MemoryLayout.size(ofValue: key))
return withUnsafePointer(to: key) { myhash($0, len, seed) }
}

请记住,结构类型可能有内部填充,我不相信 Swift promise 会对其进行初始化。因此,如果您不小心传递到此处的内容,您可能会散列随机值。当然,类型可能具有不明显的内部状态,可能导致“相等”值以不同方式散列,反之亦然。考虑到难以诊断错误的可能性,我通常会建议为您知道该函数可接受的类型编写特定的重载,而不是尝试对 Any 进行散列。至少,我会将 T 限制为某种协议(protocol)(没有语法要求),表达“我已经检查过这种类型是 myhash-able”。

关于swift - 是否可以从 Any 类型中获取他的 UnsafeRawPointer 和长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58881447/

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