Может ли 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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