Может ли iter_swap быть специализированным?C++

Программы на C++. Форум разработчиков
Anonymous
Может ли iter_swap быть специализированным?

Сообщение Anonymous »

Если у меня есть контейнер std::vector items, я могу создать IndirectIterator, который обертывает std::vector::iterator и позволяет перебирать T, а не T*.

Могу ли я специализировать iter_swap для IndirectIterator для создавать стандартные алгоритмы (такие как std::sort) поменять местами элементы по указателю?

т.е., если я напишу следующее, окажет ли это какое-либо влияние на стандартные алгоритмы?

Код: Выделить всё

namespace some_namespace
{
template 
class IndirectIterator
{
IterT m_base;
public:
typedef IterT base_iterator;
typedef /* ... */ reference;

/* ... */

reference operator*() const { **m_base; }

const base_iterator& base() const { return m_base; }
base_iterator& base() { return m_base; }
};

template 
void iter_swap(IndirectIterator& a, IndirectIterator& b)
{
using std::iter_swap;
iter_swap(a.base(), b.base());
}
}
Преимущество этой специализации заключается в том, что она заменяет указатели, а не полные экземпляры T, поэтому она работает быстрее (потенциально).

Подробнее здесь: https://stackoverflow.com/questions/122 ... pecialised

Вернуться в «C++»