有没有一种方法可以确保在创建 struct 对象时它始终是一个指针?
例如:
例如:
typedef struct
{
int foo;
} blah;
blah a; // error
blah* b; // ok
struct
的定义放到一个单独的翻译单元中,远离公众视线。然后,在其他某个更公开的地方,只需声明该结构即可:typedef struct x blah;
blah
是一个不完整类型,因此只有访问该声明的人才能创建 blah *
对象,而无法创建完整的 blah
对象。typedef struct
{
int foo;
} *blah;
blah
本质上是一个指针类型,任何声明:blah b;
实际上只是创建了一个指针。由于这个struct
本身是匿名的,除了通过仅限于指针的typedef
之外,没有其他方法可以创建它。
苹果在其核心基础框架中经常使用这种语法。他们大量使用CF____Ref
对象,就像这样:
struct __CFArray {
// Internal Structure
};
// Copied from CFArray.h
typedef const struct __CFArray * CFArrayRef;
因此,如果您编写以下代码:
CFArrayRef myArray;
它自动成为一个指针。
blah a;
的声明?你是想确保blah
对象只能通过你提供的接口创建吗? - user2357112