Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标-C:“;“铸造结构”;_Objective C_Ios_Casting_Struct - Fatal编程技术网

Objective c 目标-C:“;“铸造结构”;

Objective c 目标-C:“;“铸造结构”;,objective-c,ios,casting,struct,Objective C,Ios,Casting,Struct,我需要找到一种方法告诉我的程序的C编译器,某个结构与另一个结构相同(它们在定义上是相同的)。我想选演员会很不错,但也许这不是个好主意 我之所以不只是使用一个结构,是因为结构是在非常繁重的框架类中定义的,我自己有很多不同的类导入需要在它的.h中使用结构的类 那么,如果可能的话,我如何告诉编译器可以将Struct A用于要求Struct B的函数,因为它们是相同的 为了使这一点非常具体,在我的例子中,我有一个由大约14个类访问和使用的单例。singleton中的一些函数与其他类一起工作,并为它们的

我需要找到一种方法告诉我的程序的C编译器,某个结构与另一个结构相同(它们在定义上是相同的)。我想选演员会很不错,但也许这不是个好主意

我之所以不只是使用一个结构,是因为结构是在非常繁重的框架类中定义的,我自己有很多不同的类导入需要在它的
.h
中使用结构的类

那么,如果可能的话,我如何告诉编译器可以将
Struct A
用于要求
Struct B
的函数,因为它们是相同的


为了使这一点非常具体,在我的例子中,我有一个由大约14个类访问和使用的单例。singleton中的一些函数与其他类一起工作,并为它们的特定导入提供资源和数据。其中之一是MapKit框架。MapKit框架中有许多我一直在使用的结构(特别是MKUserLocation.h),但将导入许多其他类并在定义中添加很多内容

我的一个具体例子是使用CLLocationCoordinate2D,我必须在我的单例中重新创建它,以便不是所有14个类都从MapKit框架导入。这似乎太过分了


我知道如何使这些都能工作,但除了强制转换或导入到所有内容之外,应该有一个很好的解决方案。

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

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

为什么不尝试使用相同的结构呢。我看到你解释说它们不同,但这可能是最优雅的解决方案。否则,创建一个复制结构(不太优雅)或适配器的函数。使用条件定义。如果已为该文件定义了另一个版本,则不要定义该版本。定义你的,当另一个没有定义时使用相同的名称。如果其他所有内容都被破坏,你总是可以求助于
*(struct OtherStruct*)&variable
,但这是一个黑客行为(我不确定它无论如何都不是UB)。@H2CO3这就是我想使用的,但它看起来确实很黑客。@RileyE Nevermind BSD sockets API广泛使用它…--“全局如何处?如果你真的是指一个全局函数,那么我应该在使用它时使用隐式声明?因此,一个结构来自你正在调用的导入库,另一个由你的代码定义?我不理解。是的。我必须自己定义一个,因为我无法导入最初定义它的库类。”这意味着两个类都可以访问。你怎么能让两个类都可以访问,但在定义的结构中没有链接的类呢?这听起来像是一个重新设计的过程。这将在将来对你产生影响。即使你想办法愚弄编译器,如果你不得不愚弄编译器,它也会尖叫出糟糕的设计。这绝对不是不是糟糕的设计。总是导入所有的东西是糟糕的设计。我不知道如何解释它,除了有一个中心类不需要访问所有的库,但是只有几个结构,所以它定义了它自己的。其他一些类利用库,所以他们导入它们。核心的单例类需要Utiliti由于各种不同的原因,许多不同的类对其进行了加密,因为所有的数据都是混合的。这是一个庞大而复杂的系统,所以我想很难解释。核心只进行计算,而不使用库。