這有點類似於我的以前question,我想實現一個模板地圖類。模板化地圖/字典實現
template<typename T, size_t M> class Array { ... } // Fixed-size container
template<typename T> class Vector { ... } // Variable-size container
方法1:
template<typename KeyContainer, typename ValueContainer> class Map
{
KeyContainer keys;
ValueContainer values;
}
這裏的問題是我不能保證兩個容器將是相同的,用戶可以通過一個Array<T, M>
作爲密鑰容器和Vector<T>
作爲值容器導致的問題,一旦地圖開始超過在Array<T, M>
模板中指定的大小。
方法2:
template<typename KeyType, typename ValueType, template<typename> class Container> class Map
{
Container<KeyType> keys;
Container<ValueType> values;
// What if Container is an Array<T, M>?
}
而是表現在我以前的那個我聯繫似乎是不可能這樣做的問題:接收已經變參數計數的容器模板,除非有一些巧妙的模板我不知道的技巧。
方法3:
實現方法1,只是把一張紙條,告知用戶KeyContainer
和ValueContainer
必須是同一類型的容器的文檔。
問題: 什麼是最理想的方式去解決這個問題?
爲什麼你要爲'Map'指定一個容器?如果你想複製'std :: map'的功能,你需要實現一個RB-Tree。 – NathanOliver
你的意思是最佳?有什麼限制?目標是什麼? – m8mble
@NathanOliver忘了提及我正在做這個練習,這就是爲什麼我沒有提到STL容器的原因。至於爲Map指定容器的問題,我希望這個類足夠靈活,能夠接受任何類型的容器實現。 –