【问题标题】:Objective-C: "Casting a struct"Objective-C:“铸造一个结构”
【发布时间】: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


【解决方案1】:

你能简单地编写一个全局函数来从一个结构体转换到另一个结构体吗?

void OneStructToAnotherStruct( struct FromStruct* from, struct ToStruct* to )
{
   to->x = from->x;
   to->y = from ->y;
   to->z = from->z;
}

【讨论】:

  • 全球在哪里?如果你真的是一个全局函数,那么我应该在使用时使用隐式声明?
  • 那么,一个结构来自您正在调用的导入库,而另一个由您的代码定义?我不明白。
  • 是的。我必须自己定义一个,因为我无法导入最初定义它的库类。这意味着有几个类可以访问两者。
  • 你怎样才能让类在定义的结构中同时访问但不链接?听起来重新设计是为了。这将在未来咬你。即使你想出了一个欺骗编译器的方法,如果你必须欺骗编译器,那就是糟糕的设计。
  • 它的设计绝对不差。它的设计很糟糕,只是一直导入所有东西。我不知道如何解释它,除了有一个不需要访问所有库的中心类,只需要几个结构,所以它定义了它自己的。其他一些类使用这些库,因此它们导入它们。由于各种不同的原因,核心单例类需要被许多不同的类使用,因为所有数据都混合在一起。它是一个庞大而复杂的系统,所以我想它很难解释。核心只计算,而不是使用库。
猜你喜欢
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
相关资源
最近更新 更多