我的目標是定義一個模板來創建一個建設性的類型,例如:是可變參數模板足以確定建設性類型
MyCT := foo | bar of int | baz of WeirdClass | bat of (String, MyCT)
內部,前綴是一個枚舉類型的雙字節值,即: {0}
或{1,-20}
或{2,{weirdo:WeirdClass}}
或{3,{"Like I said",0}}
或{3,Pair<String,MyCT>{"a",{1,626}}}
等。
它看起來像...
語法的可變參數模板可以幫助,但我關注以下幾點:對應於枚舉值的數量
- 可以創建構造函數的倍數是多少?
- 如果枚舉值的數量不等於相應類型的數量,我們可以拋出一個編譯時錯誤?
- 由模板創建的類型將本身是形式
MyCT<ET>
,其中ET
是枚舉類型的模板。我們如何確保只使用與枚舉值相對應的構造函數? - 如果在
MyCT<et>
,et
不在ET
中,模板的枚舉類型是否可以拋出編譯時錯誤? - 我們能做到這一點,使
MyCT<foo>
鍵入匹配MyCT<baz>
?
的問題是不明確的。我沒有看到* compile-time | runtime *障礙在這裏:爲什麼枚舉標記?運行時是否指定了枚舉值?如果它在編譯時提供的所有東西,我認爲我們可以輕鬆地重新設計,並使用一些模板元編程實現它。 – Manu343726
這個目標值得讚揚,但並非真的可以實現。我誠摯的建議是忘記它。如果你想要ML或Haskell,你知道在哪裏找到它們。 –
感謝您的想法,Manu343726。以下內容不應編譯,並且應該給出編譯時錯誤: ConstrType 因爲ET有四個值並且只提供三種類型。這應該通過檢查語法來輕鬆處理。 比方說,我們有正確的語法建設性類型的模板和實例化它是這樣的: 模板 公共類MyCT ; 模板 公共類MyCT :ConstrType >> {...} (語法除外),我們希望在MyCT 對等嚴格類型。 沒有MyCT 。 –