私はC++で定期的にblitzライブラリを使用しています。2次元配列を印刷するような、かなりの数の優れた機能があります。
cout<<A<<endl;
ただし、出力は次のようになります(2x2アレイの場合)
2 x 2
[ 4 5
2 1]
ここで、2x2の寸法とそれが配置する角かっこを削除したいと思います。これは、ファイルを直接使用して何かをプロットしたいときに問題が発生することがあるためです。どうすればよいですか?
独自の出力ルーチンを作成する必要があります。
おそらくそれを行う最も簡単な方法は、プロキシクラステンプレートを作成することです。
template <typename blitzarray>
struct printer
{
printer (const blitzarray& ba_) : ba(ba_) {}
const blitzarray& ba;
};
好きなように配列を出力します。
template <typename blitzarray, typename stream>
stream& operator<< (stream& s, printer<blitzarray> pb)
{
// <-- print the array here <--
return s;
}
次に、テンプレート引数を推測するのに役立つ小さなヘルパー関数があります。
template <typename blitzarray>
printer<blitzarray> myprint(const blitzarray& ba)
{
return printer<blitzarray>(ba);
}
使用法は次のとおりです。
cout << myprint(A) << endl;
おそらく、元のblitz++出力ルーチンから借りることができます。