我的std ::子類地圖如何爲多個鍵類型專門化一個std映射?
template<class ValueT>
FancyKeyMap
: public std::map<FancyKey,ValueT, FancyKey::Less>
{
...
public:
inline iterator find(FancyKeyArg key)
{
return(std::map<FancyKey,ValueT,
FancyKey::Less>::find(FancyKeyArg.makeKeyRef()));
}
};
這工作得很好,(不要問我爲什麼不希望使用一些implicint轉換,這會導致太多的曖昧重載也在這種情況下,一個完整的轉換是昂貴的:)
反正它woudl是很好,如果上述可能是性病的專業化::地圖,任何
std::map<FancyKey,ValueT> fancymap;
woudl做同樣的事情,
FancyKeyMap<ValueT> fancyMap;
能做這種專業化嗎?
好吧只是嘗試了偏特:
namespace std {
template<class ValT, class CompareT=FancyKey::Less,
class AllocT=allocator<pair<const FancyKey,ValT> > >
class map<FancyKey, ValT, CompareT, AllocT>
{
....
};
}
我得到這個錯誤:
「默認參數不允許在局部特殊化」
而是使之像std :: map需要讓「繼承」的默認參數和允許它們被覆蓋。下一步是可能的?
我沒有看到一個建議,對於具有搜索模板FAQ它似乎這是一個非常普遍的問題; ^>
爲什麼你有'FancyKeyMap'? – GManNickG
在C++ 0x中,你可以說'tempate使用FancyKeyMap = std :: map ;'。 –
我希望你知道,從STL容器繼承通常被認爲是不好的做法,因爲它們沒有虛擬析構函數。如果你不添加數據成員到你的班級,你可以避開它,但最好用組合來代替。 –