サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]
#include <iostream>
#include <string>
#include <boost/swap.hpp>
int main()
{
int x=100, y=200;
boost::swap(x, y);
std::cout << x << " " << y << std::endl;
std::string s="foo", t="bar";
boost::swap(s, t);
std::cout << s << " " << t << std::endl;
int a[]={1,2,3}, b[]={4,5,6};
boost::swap(a, b);
std::cout << a[1] << " " << b[1] << std::endl;
}
200 100 bar foo 5 2
標準ライブラリにも std::swap という汎用スワップ関数は用意されているのですが、 そちらは汎用過ぎて、例外安全の保証が弱かったり、効率が悪かったりします。 なので、スワップ対象の型の側でswap関数が用意されていたらそちらを使った方が良いのですが…… 汎用コードの中で「専用swapが用意されていれば使う、用意されていなければstd::swap」という処理を書こうと思うと、
{
...
using namespace std;
swap(x, y);
...
}
といった、using namespace を使う技が必要になってきます。 この2行をラップして一つの関数にしたのが、要するに、boost::swap。それだけです。