Изменение формата вывода в блиц

Я регулярно использую библиотеку блиц в с ++. У этого есть довольно много хороших средств как напечатать 2-мерный массив, который просто необходим

cout<<A<<endl;

Тем не менее, выход получается как (для массивов 2x2)

2 x 2
[ 4  5 
  2  1]

Теперь я хочу избавиться от измерения 2x2 и заключенных в него скобок, потому что это иногда создает проблему, когда я хочу напрямую использовать файл для построения графика. Как мне это сделать?

1 ответ

Решение

Вам нужно написать свою собственную процедуру вывода.

Вероятно, самый простой способ сделать это - создать шаблон прокси-класса:

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++.

Другие вопросы по тегам