有人对什么是“不透明类型”有很好的解释吗?我在CFBundleRef的上下文中看到了这个术语,他们说:"CFBundleRef不透明类型“。这是只读的类型吗?
发布于 2009-04-09 17:45:24
“不透明类型”是指没有完整的struct或class定义的类型。在C、C++和Objective-C中,您可以通过使用转发声明告诉编译器稍后将定义一个类型:
// forward declaration of struct in C, C++ and Objective-C
struct Foo;
// forward declaration of class in C++:
class Bar;
// forward declaration of class in Objective-C:
@class Baz;除了声明指向struct或class的指针之外,编译器没有足够的信息让您直接使用它做任何事情,但这通常是您需要做的全部工作。这允许库和框架创建者隐藏实现细节。然后,库或框架的用户调用助手函数来创建、操作和销毁前向声明的struct或class的实例。例如,框架创建者可以为struct Foo创建以下函数
struct Foo *createFoo(void);
void addNumberToFoo(struct Foo *foo, int number);
void destroyFoo(struct Foo *foo);作为核心基础框架的一部分,苹果公司通过不透明的类型向C程序员提供了通用的Objective-C类,如NSString、NSArray和NSBundle。C程序员使用指针和帮助器函数来创建、操作和销毁这些Objective-C类的实例。苹果公司称之为“免费搭桥”。它们遵循一个共同的命名约定:"CF“前缀+类名+ "Ref”后缀,其中"CF“代表"Core Foundation”,"Ref“代表"Reference",这意味着它是一个指针。
发布于 2009-04-09 17:27:07
不透明类型是一种“包装”较低级别类型的类型,通常在以下情况下使用:底层实现复杂,或者用户根本不需要知道内部工作原理。Apple在这里有一个关于不透明类型的很好的页面:
例如,CFString是一种不透明类型,因为它包装了一个字符数组,保持其长度、编码等,但不允许用户直接访问这些值。相反,它提供了访问或操作内部字段并向用户返回相关信息的方法。
发布于 2009-04-09 17:28:05
这是一个未来声明的结构。例如:
typedef struct CFBundle *CFBundleRef;如果没有“结构CFBundle”的实际定义,您的代码将无法访问CFBundleRef指针内的任何内容。这是不透明的。
https://stackoverflow.com/questions/735131
复制相似问题