C++ C++;使用模板时进行类型检查

C++ C++;使用模板时进行类型检查,c++,class,templates,operator-overloading,C++,Class,Templates,Operator Overloading,我有一个这样定义的链表类 template <typename Bin> class LinkedList { ... struct node{ Bin value; ... }; ... }; 模板 类链接列表{ ... 结构节点{ 仓位值; ... }; ... }; 在这里,我想重写==操作符来检查两个列表是否相等。我已经把它设置好了,并且在类型相同的情况下工作。e、 g LinkedList<int&

我有一个这样定义的链表类

template <typename Bin> 
    class LinkedList {
    ...
    struct node{
        Bin value;
        ...
    };
...
};
模板
类链接列表{
...
结构节点{
仓位值;
...
};
...
};
在这里,我想重写==操作符来检查两个列表是否相等。我已经把它设置好了,并且在类型相同的情况下工作。e、 g

LinkedList<int> a;
LinkedList<int> b;
a == b;
LinkedList a;
链接列表b;
a==b;
工作正常,但如果在不同类型之间进行比较,则会出现编译器错误。除了假设不会比较不匹配的类型之外,还有其他解决方法吗

#包括
#include <type_traits>

template<class T>
  struct List
  {

  };

template<class L, class R> 
  auto operator==(const List<L>& l, const List<R>& r)
  -> decltype(std::declval<L>() == std::declval<R>())
{
  bool same = true;
  // run through l and r comparing elements
  // this function will only expand if there is a valid comparison
  // between an L and an R

  return same;
}


int main()
{
  List<int> x;
  List<double> y;

  auto same = x == y;
}
模板 结构列表 { }; 模板 自动运算符==(常数列表和l、常数列表和r) ->decltype(std::declval()==std::declval()) { 布尔相同=正确; //运行l和r比较元素 //仅当存在有效比较时,此函数才会展开 //在L和R之间 返回相同的值; } int main() { 清单十; 列表y; 自动相同=x==y; }
那么你是说你希望能够比较不同类型的列表?@Brian:例如,比较
LinkedList
LinkedList
对我来说似乎很有意义。