Я бы сказал, что все в порядке, если это увеличивает читабельность.Суди себя.Только мои два цента: специализация std::swap
не совсем правильный способ сделать это.Рассмотрим следующую ситуацию:
my_stuff::C c, b;
// ...
swap(c, b);
// ...
Это не найдет std::swap
, если вы еще не сделали using std::swap
или что-то подобное.Вам лучше объявить свой собственный своп в пространстве имен C
:
void swap(C &a, C &b) {
a.swap(b);
}
Теперь это будет работать и в вышеприведенном случае, потому что поиск в зависимости от аргументов выполняет поиск в пространстве имен класса.Перестановка кода применительно к обычным вещам, для которых тип неизвестен, должна делать это следующим образом:
using std::swap;
swap(a, b);
Независимо от типа, при этом будет использоваться наиболее подходящий своп, и откат к std::swap
еслилучше подходит в пространствах имен a
.Жесткое кодирование вызова к std::swap
будет слишком коротким для типов, которые не специализируются на std::swap
, а скорее решат обеспечить свой собственный обмен в своем пространстве имен.
Это очень важно по-другому: представьте себе C
это шаблон.Вы не можете специализироваться std::swap
в этом случае.Но просто определить собственный своп - это прекрасно.
template<typename T>
void swap(C<T> &a, C<T> &b) {
a.swap(b);
}
Так же реализован своп для std::string
и других классов.