我尝试使用(仅)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