В данный момент имеется функция-член класса swap
:
void Implementation::swap(Implementation& other) noexcept
{
using std::swap;
swap(this->m_number, other.m_number);
swap(this->m_string, other.m_string);
swap(this->m_vector, other.m_vector);
}
а также свободная функция swap
, вызывающая Implementation::swap
:
inline void swap(Implementation& lhs, Implementation& rhs) noexcept
{
lhs.swap(rhs);
}
Такая техника описана у Скотта Мейерса, а также используется в бусте.
Далее я натолкнулся на мнение, что функция-член засоряет класс, соответсвенно, убрать ее, а лучше сделать функцию swap
другом класса и написать нечто такое:
class Implementation
{
public:
inline friend void swap(Implementation& lhs, Implementation& rhs) noexcept;
};
inline void swap(Implementation& lhs, Implementation& rhs) noexcept
{
using std::swap;
swap(lhs.m_number, rhs.m_number);
swap(lhs.m_string, rhs.m_string);
swap(lhs.m_vector, rhs.m_vector);
}
В объяснении приводились доводы в пользу ADL, но довольно туманно и до конца их я не понял. Объясните, пожалуйста, какая техника написания swap
является сейчас наилучшей?
P.S. Еще вопрос относительно стиля: должна ли функция swap
возвращать что-то, например, Implementation&
или же стоит обойтись void
?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть QListView и модель для него, унаследованная от QAbstractListModelМне необходимо отображать элементы модели при помощи кастомных виджетов
Я бы хотел таким образом получить максимальный элемент field, но не понимаю, как получить возвращаемое значение
Пытаюсь собрать sigrok pulseview использую msys2Все время получаю ошибки или не найти хедеры или проблемы с библиотеками у линковщика, последнее что...
Делаю параграмму на С++ которая через интернет будет передавать скриншот рабочого стола и сохранять на другом компе