我有一個類Target
與「文件類型」enum
它擁有我的解析器需要知道的各種文件(當前源,頭,資源)。我想我的解析功能,可以做喜歡的事,通用:可擴展的解析器設計
if(token == some_known_fileType)
put_nextToken_in_the_list_for_that_fileType();
else
return an_error();
但有一個問題:我希望能夠用簡單的Target
子類,即延長enum
擴展已知文件類型以正確的方式,請參閱Base enum class inheritance瞭解我是如何做到的。我不想修改上面的代碼,但只是一般地擴展目標的一半。 C++ 0X可能是必需的,非常受歡迎。
謝謝!
更新:一旦試圖在這裏解釋它,併發布一些簡化的類聲明,我意識到我的設計被破壞了,並且我嘗試在我的類結構中推動fileType的特化。我只想在一個地方存儲所有已知類型的完整列表,但是在嘗試這樣做時,我不小心強迫設計一次在兩個地方訪問該列表。我現在認識到,所有文件類型的列表應該是關鍵字SOURCE,HEADER等被讀取的位置,並且從其上被一般處理。我將在一個地方存儲完整列表,然後通過「巨大」enum
訪問該列表。 A std::map<fileType, std::set<std::string> >
作爲合乎邏輯的選擇在我的腦海中流行,而不是分別爲每個特定的fileType
命名爲set
。感謝您在回覆中的braincandy!任何想法仍然受歡迎。
你介意添加一些你的代碼。我不確定你想要做什麼... – ronag 2010-12-01 18:14:49