gpt4 book ai didi

rust - 编码 SIMD 类型和将它们用于 Objective-C 运行时的函数的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-29 08:18:48 25 4
gpt4 key购买 nike

我正在使用 Objective-C 以外的语言开发应用程序,我遇到了 newBoxWithDimensions .它使用来自 SIMD API 的 vector_float3 类型。

由于 vector_float3 类型,我无法对此函数进行编码。

我找到了 Why can't gcc or clang properly @encode SIMD vector types? ;这里的问题是当@encode 没有对 SIMD 类型进行编码时,它就不能为那些使用 SIMD 类型的函数创建一个合适的形式,然后消息发送验证失败。如何在消息发送验证中绕过这个编码问题?

最佳答案

作为实验,我请求了 +newBoxWithDimensions:segments:geometryType:inwardNormals:allocator: 的方法签名,使用:

NSMethodSignature* sig = [MDLMesh methodSignatureForSelector:@selector(newBoxWithDimensions:segments:geometryType:inwardNormals:allocator:)];

然后我列举了它的参数和它们的类型编码。事实证明,签名只是跳过了两个向量参数。它显示总共有 5 个参数,其中包括隐式的 self_cmd 参数,而应该有 7 个。编码是“@”、“:”、“q” ", "c", "@",其中前两个对应于self_cmd,后三个对应方法的最后三个参数。

我认为您最安全的方法是编写一个 Objective-C 模块,该模块导出一个包装此方法的函数,但其​​中向量分量单独传递(即三个 float 维度参数和三个 unsigned int 段的参数)。它将根据这些单独的参数构造向量参数并调用类方法,返回其结果。

关于rust - 编码 SIMD 类型和将它们用于 Objective-C 运行时的函数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44597919/

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