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
对我来说似乎很有意义。