Рассматривая документацию для std::swap
, я вижу много специализаций.
Похоже, что каждый контейнер STL, а также многие другие объекты STD имеют специализированный обмен.
Я думал, что с помощью шаблонов нам не нужны все эти специализации?
Например,
Если я пишу свой собственный pair
, он корректно работает с шаблонизированной версией:
template<class T1,class T2>
struct my_pair{
T1 t1;
T2 t2;
};
int main() {
my_pair<int,char> x{1,'a'};
my_pair<int,char> y{2,'b'};
std::swap(x,y);
}
Итак, что получается из специализирования std::pair
?
template< class T1, class T2 >
void swap( pair<T1,T2>& lhs, pair<T1,T2>& rhs );
Мне также интересно, нужно ли писать собственные специализации для пользовательских классов,
или просто полагаться на версию шаблона.