如何在C++中比较两种泛型类型?

HoN*_*uRu 5 c++ templates

我需要确定一个元素是否与我通过引用传递的元素相同.在函数中,Belongs我需要比较dis和动态列表中存储的元素之间的相等性:

struct Nodo{ Dominio dominio; Rando rango; Nodo* next; }; 
typedef Nodo* ptrNodo; 
ptrNodo pri; 

template<class Dominio, class Rango>
bool DicListas<Dominio,Rango>::Belongs(const Dominio &d)
{
  bool retorno = false;
  if(!EsVacia())
  {
    ptrNodo aux=pri;

    while(aux!=NULL)
    {
      if(aux->dominio==d)//-------> THIS CLASS DOESN'T KNOW HOW TO COMPARE THE TYPE DOMINIO.
      {
        retorno = aux->isDef;
      }
      aux = aux->sig;
    }
  }
  return retorno;
}
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 5

无论您为类型参数提供什么类型参数 Dominio,您都必须operator==为该类型重载。

假设你这样写:

DicListas<A,B>  obj;
obj.Belongs(A());
Run Code Online (Sandbox Code Playgroud)

那么你必须重载operator==类型A为:

class A
{
 public:
    bool operator == (const A &a) const
    {
       //compare this and a.. and return true or false
    }
};
Run Code Online (Sandbox Code Playgroud)

另请注意,public如果它是成员函数,则应该是,并且最好使其也const起作用,以便您可以比较type 的const对象A

除了使其成为成员函数之外,您还可以创建operator==一个非成员函数:

bool operator == (const A &left, const A & right)
{
     //compare left and right.. and return true or false
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢后者。