我嘗試使用(僅)STL創建BidirectionalMap類(不,boost不是一個選項)。我有99%的工作方式符合我的要求,但我真的無法弄清楚如何強制模板需要兩種不同的類型,以便可以正確覆蓋operator []。像...執行不同的C++模板參數
template < class KeyType, class ValueType >
class BidirectionalMap
{
public:
...
const ValueType& operator[](const KeyType& _k) { return(m_keyMap[ _k ]); }
const KeyType& operator[](const ValueType& _v) { return(m_valMap[ _v ]); }
private:
std::map<KeyType> m_keyMap;
std::map<ValueType> m_valueMap;
};
main()
{
BidirectionalMap< Foo, Foo > fooMap; // won't work, ambiguous.
BidirectionalMap< Foo, Bar > fooBarMap; // does work.
}
想法? -R
C++不會爲你處理這個開箱即用的問題嗎?既然你的'operator' []'會很好,我猜如果'KeyType'和'ValueType'相等,編譯就會失敗。 – larsmoa 2011-06-15 12:25:20
你可以看一下'boost :: multi_index_container'的源代碼來獲得我想的一些提示。如果不符合許可證要求,您不能合法地複製代碼,但您至少可以看到他們是如何做到的。 – 2011-06-15 12:26:00
它已經需要不同的類型。爲這兩個參數提供相同的類型將嘗試創建同一個方法'operator []'的兩個不同版本,從而無法編譯。你還想做什麼? – Xion 2011-06-15 12:26:59