转发声明可能的typedef c 0x

我从问题
Forward declare a class’s public typedef in c++的答案中理解,向前声明可能是typedef的东西在C中是不可能的.

有可能做这个问题在C 0x中提出的问题吗?

否则,进行如下更改:

class X {...};
typedef X Z;

class Y {...};
typedef Y Z;

打破客户端代码.

我认为不应该是这种情况,因为typedef的意思是它们应该使底层类型对客户端透明,因此您可以在不破坏客户端代码的情况下更改实现.

澄清

基本上,假设我们可以有这两个选项:

class X {...};
typedef X Z; // (1)

要么

class Z {...}; // (2)

我希望能够在客户端代码中执行此操作:

class Z; // Or something of this effect, sadly this fails in the case of (1)

无论Z是typedef还是类(实际上对客户端应该是透明的),该代码都不需要改变.

最佳答案 假设标题包含在用户来源的“头部”,并且他们不会转发声明您的类.如果用户想要一个重量更轻的标题,请给他们一个.

标准库包括一个由前向声明组成的标题,< iosfwd>.您可以采用或改编该约定,例如“foo_forward.h”.

当用户在任何地方为您的班级撰写前瞻性声明时,他实际上是在为您编写标题.这是一个站不住脚的安排.

点赞