我为一个处理队列的类写了一个operator ==的重载。 在这个类中,我使用模板,我想要添加的第一个控件是模板类型的控制。
这是代码
bool operator==(const Queue<T>& queue)
{
NodoCS<T>* NodoA = First;
NodoCS<T>* NodoB = coda.First;
if (this->DimQueue() != coda.DimQueue())
return false;
else
{
for (int i = 0; i < DimQueue(); i++)
{
if (NodoA->Element() != NodoB->Element())
return false;
NodoA = NodoA->NextAddress();
NodoB = NodoB->NextAddress();
}
return true;
}
}
实施例: 我有这个队列:
Queue<int> queue1
和Queue<string> queue2
显然这些不相等,所以如何控制int与字符串不同?
我试图以这种方式编写函数的参数:
const Queue<T1>& queue
然后if(T != T1)
....但是这是错误的
答案 0 :(得分:2)
只需编写一个operator==
的重载,它会比较相同类型的队列,而其他类型的队列则会比较不同类型的队列。后者始终返回false
:
template<typename T>
bool operator==( const foo<T>& lhs , const foo<T>& rhs )
{
return /* queues comparison */;
}
template<typename T , typename U>
bool operator==( const foo<T>& lhs , const foo<U>& rhs )
{
return false;
}
Here是ideone的一个运行示例。
答案 1 :(得分:-3)
如果您使用的是boost或c ++ 11,
template<typename U>
typename std::enable_if<std::is_same<T, U>, bool>::type
operator == (const Queue<U>& other)
{
... do member comparison here
}
template<typename U>
typename std::disable_if<std::is_same<T, U>, bool>::type
operator == (const Queue<U>& other)
{
return false;
}