我经常在 C++ 中使用 blitz 库。它有很多不错的功能,比如打印一个二维数组,只需要
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++ 输出例程。