我寫了這個小碼爲什麼在STL地圖模板中使用模板作爲參數會被拒絕?
std::map<int,template<class T>> map_;
map_.insert(make_pair<int,message>(myMsg.id,myMsg));
但是編譯器似乎並沒有得到它,並顯示爲錯誤
template argument 2 is invalid
,當我試圖做這個
template<class T>
std::map<int,T> map_;
糾正
它顯示爲一個錯誤:
expected primary-expression before 'template' |
error: expected ';' before 'template'
什麼是它應該做的?請注意,模板必須始終在編譯時解析。看來你想用它們來構建一個多態的容器,這是不可能的;你必須爲此使用虛擬繼承。 – leftaroundabout 2012-04-03 10:47:46
實際上,我應該在地圖中存儲每種類型的消息,所以我嘗試通過「std :: map> map_;」調用它來創建全局結構。 (它也不工作),所以class可以是message_typeA,message_typeB等 –
Glolita
2012-04-03 12:06:14
正如我所說的那樣,這是不可能的。製作'message_typeA','message_typeB'派生的類爲'messegetype_base',然後你就可以使用一個容器。 'std :: unique_ptr's到這些對象中的任何一個。這比動態語言(或者至少是垃圾收集的)要複雜一些,但它確實有它的好處(編譯時類型安全,性能良好......)。 – leftaroundabout 2012-04-03 12:23:09