我可以使用operator ==作为指针吗?

时间:2013-06-14 16:31:15

标签: c++ operator-overloading

我创建了一些带有重载operator ==的Object。

    class Corridor
    {
    public:
       Corridor(int iStart, int iEnd);
        ~Corridor();

        // Overloaded operators to simplify search in container.
        friend bool operator==(const Corridor& lhs, const int rhs);
        friend bool operator==(const int lhs, const Corridor& rhs);

    protected:
        int m_iIntersectionIDStart;
        int m_iIntersectionIDEnd;
    };

在这种情况下,如果我创建Corridors的某处矢量:

    vector<Corridor> m_vCorridors;

proggram工作正常,我可以使用find算法:

    auto itCorridor = find(m_vCorridors.begin(), m_vCorridors.end(), someID);

但是如果我创建指针向量:

    vector<Corridor*> m_vCorridors;

我收到错误: 错误1错误C2446:'==':没有从'const int'转换为'Corridor *'c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ algorithm 41 错误2错误C2040:'==':'Corridor *'的间接级别与'const int'c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ algorithm 41

不同

尝试以不同的方式重载operator ==,但它不适用于这种情况。有人知道我应该怎么做来解决问题吗?

1 个答案:

答案 0 :(得分:9)

这是因为find正在尝试将指向Corridor的指针与int进行比较。要再次将Corridorint进行比较,您需要使用find_if定义自己的比较器。假设你可以使用C ++ 11 lambdas,

find_if(m_vCorridors.begin(), m_vCorridors.end(), [=](Corridor* cp) {
    return *cp == someID;
});