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

Is it possible to get from Any type his UnsafeRawPointer and length?

我只想调用 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([=10=], len, seed) }
}

请记住,结构类型可能有内部填充,我不相信 Swift 承诺会进行初始化。因此,如果您不小心传递到此处的内容,您可能会散列随机值。当然,类型可能具有不明显的内部状态,可能导致 "equal" 值以不同方式散列,反之亦然。考虑到难以诊断错误的可能性,我通常会建议为您知道该函数可接受的类型编写特定的重载,而不是尝试对 Any 进行散列。至少,我会将 T 限制为某种表达 "I've checked that this type is myhash-able."

的协议(没有语法要求)