2015-09-28 28 views
0

我已經構建了一個基於類的下推式自動機有限狀態機。上下文類(內部狀態被修改的類)有一些只有狀態才能訪問的方法(遞增/遞減某些迭代器,推/彈出狀態,設置接受狀態等)。目前他們是公開的,因爲不同的州需要訪問他們。FSM中的狀態應該與上下文類型成爲朋友嗎?

將方法設置爲protected/private並將狀態定義爲上下文的朋友會更好嗎?

(NB4「意見爲基礎的!」)

回答

1

它可以是合理的,使那爲了一個共同的目的,各界朋友攜手共進類的集合,但你可以考慮一個替代方案。

對於一個非常短的,簡單的例子:

class outer 
{ 
private: 

int a; 
int b; 

public: 
class inner 
    { public: 
     outer * o; 

     inner(outer * io) : o(io) { o->a = 0; } 

    }; 

}; 

int main(int argc, const char * argv[]) 
{ 
outer o; 
outer::inner i(&o); 

return 0; 
} 

我這樣做很快,所以內部採用指針的建設是不是真的好C++,所以不要把它看作建議。

問題是,即使inner正在訪問外部的私有成員,它也會編譯。

這是做你要求的另一種方式。

+0

該解決方案不能很好地擴展。將內部類的數量增加10倍使其變得笨重且難以閱讀。 :( – Casey