operator == overload中的模板类型比较

时间:2013-12-21 17:28:03

标签: c++ templates types queue operator-keyword

我为一个处理队列的类写了一个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> queue1Queue<string> queue2

显然这些不相等,所以如何控制int与字符串不同?

我试图以这种方式编写函数的参数:

const Queue<T1>& queue

然后if(T != T1) ....但是这是错误的

2 个答案:

答案 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;
}