我需要在我的C++程序中表示一個樹層次結構(準確地說是一個AST)。好的,我多次看到了這樣的結構的例子,但有一點我不清楚。請告訴我爲什麼在C++中使用類而不是AST結構是很常見的?例如,考慮下面的代碼,即表示AST的節點:C++中的抽象語法樹:類與結構
class Comparison {
public:
Node* getLhs() const { return m_lhs; }
Node* getRhs() const { return m_rhs; }
//other stuff
private:
ComparisonOperator m_op;
Node* m_lhs;
Node* m_rhs;
};
(它是由https://github.com/clever-lang/clever/blob/master/core/ast.h#L150的啓發,但我已經扔掉了一些不必要的細節) 正如你在這裏看到我們有兩個干將其返回指針私人數據成員和那些指針甚至不是常量!正如我聽說的那樣封裝了封裝。那麼爲什麼沒有AST節點的結構(所有成員都是默認公開的)呢?你將如何在C++中實現AST(我的意思是處理可訪問性問題)? 我個人認爲結構很適合這樣的任務。
我發佈了來自任意項目的代碼,但您可能會看到這種做法(AST的封裝破壞方法)經常出現。
我會說這裏沒有實際的答案,但基於意見的答案。 – skypjack
你的問題實際上並不是關於AST,而是隱藏私人成員在對象中是否好。 –
這種感覺讓我開始咆哮爲什麼這樣的獲得者不好。但我會避免。這是非常基於意見的。 – DeiDei