【发布时间】:2012-12-13 21:33:43
【问题描述】:
我需要找到一种方法来告诉我的程序的 C 编译器某个结构与另一个结构相同(它们的定义相同)。我认为选角应该足够好,但也许不是一个好主意?
我不只是使用一个结构的原因是因为结构是在非常繁重的框架类中定义的,而且我自己有很多不同的类,导入需要在 .h 中使用结构的类.
那么,如果可能的话,我如何告诉编译器 Struct A 可以用于需要 Struct B 的函数,因为它们是相同的?
为了说明这一点,在我的例子中,我有一个可供大约 14 个类访问和使用的单例。单例中的一些函数与其他类一起工作,并为它们的特定导入提供资源和数据。其中之一是 MapKit 框架。我一直在使用 MapKit 框架中的许多结构(尤其是 MKUserLocation.h),但会导入许多其他类并在定义中添加很多内容。
我的一个具体示例是使用 CLLocationCoordinate2D,我必须在我的单例中重新创建它,以便并非所有 14 个类都从 MapKit 框架导入。好像有点过分了。
我知道如何使这一切正常工作,但除了强制转换或导入所有内容之外,应该有一个很好的解决方案。
【问题讨论】:
-
你为什么不尝试使用相同的结构。我看到你解释它们是不同的,但这可能是最优雅的解决方案。否则,创建一个复制结构(不太优雅)或适配器的函数。
-
使用条件定义。如果已为该文件定义了另一个版本,则不要定义您的版本。定义你的,当另一个没有定义时使用相同的名称。
-
如果其他所有东西都坏了,你总是可以求助于
*(struct OtherStruct *)&variable,但那是个hack(我不确定它不是UB)。 -
@H2CO3 这就是我想用的,但它看起来确实很hackish。
-
@RileyE 没关系 BSD 套接字 API 广泛使用它... -.-"
标签: objective-c ios casting struct