0

== 演算子をオーバーロードして、2 つのオブジェクトを比較しようとしています。何らかの理由で、オーバーロードされたハンドラーが呼び出されることはありません。

class gxCallback
{
public:
    virtual bool operator==(const gxCallback &aOther) const
    {
        // This is never called
        return true;
    } 
};

typedef std::vector < gxCallback* > CallbackList;

void gxObservable::Fire( gxCallback *aCallback )
{
    CallbackList::iterator iCallback;

    for ( iCallback = mCallbacks.begin(); iCallback != mCallbacks.end(); ++iCallback )
    {
        if ( aCallback == *iCallback ) // The comparison is never made via the overloaded ==
        {
            // Do something
        }
    }  
}
4

2 に答える 2

8

オブジェクトではなく、ポインターで呼び出しています。オブジェクトをイテレータが参照しているものと比較する必要があります。

if (*aCallback == **iCallback)

また、逆参照する前に、「ポインター」が何かを保持していることを確認する必要があります。

于 2012-11-05T20:59:51.513 に答える
1

オブジェクト自体ではなくポインターを比較しています。

于 2012-11-05T20:59:58.260 に答える