0

我经常在 C++ 中使用 blitz 库。它有很多不错的功能,比如打印一个二维数组,只需要

cout<<A<<endl;

但是,输出结果就像(对于 2x2 数组)

2 x 2
[ 4  5 
  2  1]

现在,我希望摆脱 2x2 尺寸和它放置的括号,因为当我希望直接使用文件来绘制某些东西时,它有时会产生问题。我该怎么做呢?

4

1 回答 1

0

您需要编写自己的输出例程。

可能最简单的方法是创建一个代理类模板:

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++ 输出例程

于 2012-06-01T18:05:56.320 回答