在C++中是否存在使用枚舉作爲模板(類型)參數的限制/問題?在C++中使用枚舉作爲模板類型參數
實施例:
enum MyEnum
{
A, B, C, D, E
};
template <typename _t>
class MyTemplate
{
public:
_t value;
void func(const _t& param) { /* .... */ }
};
// ....
MyTemplate<MyEnum> MyInstance;
我使用MSVC++經由在Win32 VS 2008(SP1)/ x86的實際問題是(由編譯器報告=錯誤)幾個編譯錯誤相關聯地使用枚舉如類模板參數。由於我的項目不幸已變得有點複雜(你可以認爲這是一個設計錯誤:P),引發這些錯誤的模板類是派生的,嵌套的,甚至專用於帶有枚舉模板參數的類。
嘗試構建時,編譯器會在只有註釋的行中報告許多錯誤/無用的錯誤,例如「C2059:語法錯誤:'public'」。他們中的很多人可以通過替換類似於示例const _t & param by _t(即複製參數)的方法來解決這些問題,但我既不能解決所有這些錯誤,也不知道爲什麼「幫助」。 **我知道,上面這個簡單的例子編譯了W/O錯誤。
使用int而不是枚舉,我的項目編譯W/O錯誤。
在此先感謝您的任何提示或提示!
編輯:
畢竟,我認真考慮這是一個編譯器錯誤。當我試圖用簡化的代碼重現錯誤時,我只在所有「構建」的50%中得到它們,不是非常確定的:
例如,試圖編譯,並報告了這些錯誤。重建 - 不變。刪除評論,建立 - 沒有改變。重建 - 然後:沒有錯誤,編譯好。
我已經遇到了一些編譯器錯誤(2或3我猜在20k代碼行內),但這個對我來說很奇怪。
任何建議如何找出它是否是的編譯器?
「試圖編譯時,編譯器會報告許多錯誤/無用的錯誤」這些「無用的」錯誤通常會對錯誤和錯誤進行非常詳細的描述。只要閱讀編譯器輸出,而不是「錯誤列表」。 – SigTerm 2010-08-14 23:08:04
感謝提示,但我做到了。我總是這麼做^^ 但它沒有幫助我...錯誤:錯誤C2059:語法錯誤:'公共'錯誤C2143:語法錯誤:缺少'>'之前';'錯誤C2143:語法錯誤:缺少';'之前'}'致命錯誤C1004:發現意外的文件結束(然後一些其他錯誤,與此問題無關)所有這些僅在使用枚舉時出現並在使用int時出現消失 – dyp 2010-08-14 23:15:11
這對我來說看起來很完美。這是一個編譯器錯誤或者你的錯誤,如果你猜測,99.9%的賭注就是你。但是,您發佈的代碼段沒有任何問題。請發佈一個完整的小樣本,以及它創建的確切編譯器錯誤。 – Omnifarious 2010-08-14 23:18:47