我可能已经知道答案,但我仍然想看看是否有人能想出一个更好的主意。C++打破循环包括
在较大的库中,我有很多类彼此交叉引用。我通常通过forward声明这些类来解决这个问题。然而,为了便于使用,我通常会定义一个参考类型,它可以出现在这样一个shared_ptr类:
class A : public B {
public:
typedef std::shared_ptr<A> Ref;
};
它允许好得多引用:A::Ref a
代替std::shared_ptr<A> a
。我现在看到的问题是使用这样的Ref需要实际包含该头文件,导致循环包含。我无法在包含前向声明的文件中定义Ref类型,因为XCode使用这样的共享指针显示vars的完全伪造值。
还有什么其他的选择可以做到这两点:让Ref在真实类型上定义,但不需要包含包含该类型的头文件?
这可能是要走的路。在上面的/封闭的名称空间中向A中添加一个前向声明,并将其放入一个标题中。 – Kent
Ref <>模板别名的确是这里最好的解决方案,并且完全满足了两个条件。 –