[STL] 怎麼樣簡化這樣的Code比較好
程式碼在此:http://nopaste.csie.org/ba2ff
因為最近在寫一個parser, 但是BNF還沒有完全想好, 所以程式是邊想邊改的。我不喜歡
一直改來改去, 所以想要作出一些類別, 它們可以代表BNF裡的terminal symbol跟
non-terminal symbol, symbol後面的symbol就用va_list來呈現, 這樣串來串去, 就可以
作出一條條的rule了。對terminal symbol部份做出lexical analyser, 想改rule時只要
重新串每個symbol就好...
然後就做出上面的實驗code了。class A代表的是一個symbol, 有3個template argument
, 分別是輸入的資料, 最多能串的symbol數, 跟長度是否固定。裡面有個陣列, 可以存
後面的symbol, 然後提供了一個foo函數, 子類別要實作它們以定義功能。
我用class A作出幾個子類別, 分別是B0(terminal symbol), B1(可串一個symbol), B2
(可串兩個symbol), VB2(至多可串兩個symbol), 然後用個外在函數gc來產生想要的這
些類別, 並且把它們互相接起來。
嗯...基本上它有照我想的運作, 不過我想改善以下幾點...
1. 能不能不用不定參數來達到gc作的事? 因為不定參數實在很不好看。
2. 如果可以, 希望讓gc裡的長度檢查在compile-time就處理掉。
3. 程式碼的長度再縮短...
4. 不要用new...我想過。但是似乎作不到, 因為類別A是個抽象型別, 如果不用指標,
它裡面的陣列就會因為不能實體化而讓compiler報錯。
大概是這樣。這是用VS2005編的。gcc似乎不支援intel版的asm...。
啊對了, 用0結尾而不給va_list的參考點是因為, 沒有特別要傳入的東西。這樣程式比較
清爽。若硬要塞個參考點, 我想也只能塞參數個數, 但是修改程式時就要一起改數字, 很
麻煩。用0當串列的結尾的話, 忘了加會在runtime被挑出來, 萬一忘了加而那格剛好是0
的話, 程式也不會因此當掉...
--
裸になって
何が悪い?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.57.76
※ 編輯: ccbruce 來自: 122.116.57.76 (11/20 21:56)
※ 編輯: ccbruce 來自: 122.116.57.76 (11/20 22:06)
→
11/20 22:14, , 1F
11/20 22:14, 1F
→
11/20 22:18, , 2F
11/20 22:18, 2F
→
11/20 22:19, , 3F
11/20 22:19, 3F
→
11/20 22:23, , 4F
11/20 22:23, 4F
→
11/20 22:24, , 5F
11/20 22:24, 5F
→
11/20 22:24, , 6F
11/20 22:24, 6F
算了用修的比較快, 我這不是作業文, 你不用把它當作業文看...沒人回也不會怎麼樣...
我是想要作到在template上就限制住傳到constructor的參數個數。也就是說當我說
_len=0時這個類別就完全不接受參數, _len=1時就接受一個, 並且這些檢查是在compile-
time就完成。
不過我失敗了, 所以才會造出一個gc函數, 至少能在run-time把參數數量限制住。並且退
而求其次限制住傳進constructor的陣列長度。
當然針對每個類別都重寫一次constructor也是一個方法, 但是這樣我就不用PO這篇文了。
如果你class數量少也就算了, 萬一你有一大堆class的話要怎麼作? 有的收一個參數, 有
的收兩個, 有個收十個?
另外我完全不知道copy在這裡能作什麼事...它只是作容器內容的複製而已...
※ 編輯: ccbruce 來自: 122.116.57.76 (11/21 00:28)
→
11/21 00:13, , 7F
11/21 00:13, 7F
→
11/21 00:15, , 8F
11/21 00:15, 8F
→
11/21 00:16, , 9F
11/21 00:16, 9F
→
11/21 00:16, , 10F
11/21 00:16, 10F
→
11/21 00:17, , 11F
11/21 00:17, 11F
→
11/21 00:18, , 12F
11/21 00:18, 12F
→
11/21 00:18, , 13F
11/21 00:18, 13F
噓
11/21 00:29, , 14F
11/21 00:29, 14F
我的問題很簡單, 剖析rc檔。把裡面不同國家的所有字串(只要是資源裡的所有用双引號括
起來的)全給塞到excel裡, 並且加上它們的Resource ID。以前弄剖析器我是用bison, 但
是bison產生出來的程式碼對UCS-16消化不良( 也許我程度不好)。所以才試著自己土法鍊
鋼。說BNF沒想好,也不全然, 因為rc的spec就有了。 要寫個能跑的剖析器當然很快就能搞
定, 事實上我已經寫好了。只是要寫個漂亮的東西就難多了, 不是嗎?也許是我表達能力不
好, 總之看來這裡是找不到我要的答案了。
※ 編輯: ccbruce 來自: 122.116.57.76 (11/21 00:40)
※ 編輯: ccbruce 來自: 122.116.57.76 (11/21 00:45)
→
11/21 00:52, , 15F
11/21 00:52, 15F
→
11/21 00:53, , 16F
11/21 00:53, 16F
→
11/21 00:55, , 17F
11/21 00:55, 17F
推
11/21 00:58, , 18F
11/21 00:58, 18F
噓
11/21 01:05, , 19F
11/21 01:05, 19F
推
11/21 13:47, , 20F
11/21 13:47, 20F
→
11/21 14:58, , 21F
11/21 14:58, 21F
→
11/22 02:08, , 22F
11/22 02:08, 22F