我从问题
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”.
当用户在任何地方为您的班级撰写前瞻性声明时,他实际上是在为您编写标题.这是一个站不住脚的安排.