Используйте шаблонный T :: operator <вместо глобального оператора - PullRequest
0 голосов
/ 20 сентября 2019

Я использую std::sort для сортировки вектора.Как мы знаем, std::sort вызовет функцию _DEBUG_RANGE (которая в итоге вызывает _Debug_range2) для проверки итератора.Код:

template<class _RanIt> inline
    void _Debug_range2(_RanIt _First, _RanIt _Last,
        _Dbfile_t _File, _Dbline_t _Line, random_access_iterator_tag)
    {   // test iterator pair for valid range, random-access iterators
    if (_First != _Last)
        {   // check for non-null pointers, valid range
        _DEBUG_POINTER2(_First, _File, _Line);
        _DEBUG_POINTER2(_Last, _File, _Line);
        if (_Last < _First)
            _DEBUG_ERROR2("invalid iterator range", _File, _Line);
        }
    }

Ошибка возникает в выражении (_Last < _First).Обычно вызывается T::operator< (T &r), но я должен использовать стороннюю библиотеку "fastdb".Эта библиотека имеет функцию bool operator<(T const & t1, T const & t2).Я хочу позвонить T::operator< вместо этого оператора библиотеки.Как мне это сделать?

//first operator< , i want to call
template<class T>
bool T::operator< (T const &r)
{
   return this._ptr < r.ptr;
}

//second definition in third party library
template<class T>
inline bool operator <(T const& x, T const& y)
{ 
    return memcmp(&x, &y, sizeof(T)) < 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...