c++ - 强制执行不同的 C++ 模板参数

标签 c++ templates

我正在尝试使用(仅)STL 创建一个 BidirectionalMap 类(不,boost 不是一个选项。)我有 99% 的工作方式是我想要的,但我真的想不通是如何强制模板需要两种不同的类型,以便 operator[] 可以被正确覆盖。像...

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

最佳答案

只需添加以下部分特化:

template <typename T>
class BidirectionalMap<T, T>;

这将使编译器实例化一个未定义的模板(因为上面只声明了),如果用户试图传递与两个模板参数相同的类型,则退出。

关于c++ - 强制执行不同的 C++ 模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6357589/

相关文章:

C++ 模板化虚函数

c++ - 将指向字符指针的指针分配给C中的字符矩阵

c++ - 将菜单栏添加到 QT cvNameWIndow

c++ - 如何将方法指针传递给结构(在 C/C++ 中)?

python - 在C++中模拟python的 "in"

c++ - std::tuple 成员指针行为

C++ 相同命名空间问题

c++ - 如何制作抽象模板类的 vector

C++:忽略候选模板:模板参数的显式指定参数无效

c++将序列上限传递给可变函数模板