我可能已經知道答案,但我仍然想看看是否有人能想出一個更好的主意。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 <>模板別名的確是這裏最好的解決方案,並且完全滿足了兩個條件。 –