Обмен через поиск в C++
Идиома using std::swap; перед
неквалифицированным swap подтягивает
поиск, зависящий от аргумента
к пользовательским перегрузкам.
Для типа из пространства имен можно обменять
не весь объект целиком, а выбранный член -
главное, чтобы перегрузка принимала ссылки
на этот тип. После директивы using
имя swap ищется среди кандидатов
std и среди функций рядом с типом.
Запишем структуру с полем Label,
пользовательский обмен и вызов через
поиск в main:
#include <iostream>
#include <utility>
struct Label {
int code;
};
namespace cargo {
struct Crate {
Label mark;
};
void swap(Crate& left, Crate& right) {
std::swap(left.mark.code, right.mark.code);
}
}
int main() {
cargo::Crate alpha{{1}};
cargo::Crate beta{{2}};
using std::swap;
swap(alpha, beta);
std::cout << alpha.mark.code << " "
<< beta.mark.code << "\n";
return 0;
}
В пространстве note опишите
struct Page с int index.
Добавьте swap для двух
Page, меняющий только index.
Обменяйте два объекта через
using std::swap; и выведите
оба индекса.