Я использую 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;
}