首页 > 解决方案 > 具有相同签名的 C++ 模板类运算符重载

问题描述

一个简单的 C++ OO 问题重新分级模板和运算符重载:在下面的类中,我重载了索引运算符两次:

template<class A, class B>
class test
{
  A a1;
  B a2;
public:
  A& operator[](const B&);
  B& operator[](const A&);
};

现在,如果我用相同的类型名实例化这个模板类的一个对象:

test<int, int> obj;

调用索引运算符将导致错误,因为两个重载函数将具有相同的签名。

有没有办法解决这个问题?

对不起,如果这是一个基本问题。我仍在学习!

标签: c++classtemplatesoperator-overloading

解决方案


您可以添加部分专业化:

template<class A>
class test<A, A>
{
  A a1, a2;
public:
  A& operator[](const A&);
};

推荐阅读