C++模板类操作符重载具有相同的签名

use*_*666 4 c++ templates class operator-overloading

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

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

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

test<int, int> obj;
Run Code Online (Sandbox Code Playgroud)

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

有什么方法可以解决这个问题吗?

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

xsk*_*xzr 5

您可以添加部分专业化:

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