Возможный дубликат:
как обеспечить функцию свопинга для моего класса?
Каждый раз, когда я думаю, что понимаю, я вижу кое-что, что меня действительно смущает.
Если вы хотите предоставить реализацию swap
для своего собственного класса, что вы делаете?
Список возможностей:
-
Определите внутри пространства имен
std
(с двумя аргументами), который вызывает # 3 ниже
(некоторые говорят, что это правильно, некоторые говорят нелегально) -
Определите статический метод внутри класса, используя два аргумента для замены (имеет для меня больше смысла, чем # 4, но я не понимаю, почему никто этого не делает), который при необходимости вызывает любой базовый класс
swap
-
Определите метод экземпляра внутри класса, взяв еще один аргумент для обмена с, который вызывает любой базовый класс
swap
при необходимости -
Определите метод экземпляра внутри класса, заменив два других аргумента, а также здесь, который при необходимости вызывает любой базовый класс
swap
-
Определите в своем собственном пространстве имен (с двумя аргументами), который вызывает # 3
-
Что-то еще
Мое собственное понимание заключается в том, что мне нужны # 5 и # 3, где вызывающий абонент будет вызывать swap
как using std::swap; swap(a, b);
, но тот факт, что никто, кажется, не предполагает, что эта комбинация действительно меня смущает. И я действительно не понимаю № 4 вообще, потому что все, кажется, используют член экземпляра, когда на самом деле операция статична. Я не могу сказать, не ошибается ли мое понимание или кучу ответов, которые я вижу при просмотре.
Каков правильный путь?