【发布时间】:2011-04-02 04:41:20
【问题描述】:
我从问题Forward declare a class's public typedef in c++ 的答案中了解到,在 C++ 中,前向声明可能是 typedef 的东西是不可能的。
是否可以在 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 还是类(它确实应该对客户端透明),都不需要更改代码。
【问题讨论】:
-
这还不清楚。那个问题是关于类内的
typedef声明,我想说解决方案是用命名空间替换或扩充类。您不能将任何东西转发声明为其他任何东西,因此不能将class转发声明为typedef。这更像你问的吗? -
嗨 Potatoswatter,我试图澄清这个问题。
-
非常好的库编写者在单独的标头中为客户提供公共类型和转发,因此客户无需手动管理。客户端只包含库的类型标头。这也很好,所以你的库标题没有转发的所有噪音。 forwards 和 typedefs 在编译时不会花费任何成本——只需将公共类型放在那里。
标签: c++ c++11 typedef forward-declaration