Матричный дисплей по ряду - PullRequest
0 голосов
/ 27 февраля 2020

Я знаю, что ArrayItems-Tag по умолчанию может обрабатывать матрицы, но я нахожу результат недостаточным.

Учитывая этот пример

#include <cstdlib>
#include <cstdio>

struct matrix {
  int height;
  int width;
  double* values;
};

int main() {
  double* values = (double*)malloc(5 * 2 * sizeof(double));
  for (int i = 0; i < 10; ++i) values[i] = i * 2;
  matrix m = { 5, 2, values };

  return 0;
}

С этим natvis

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="matrix">
    <DisplayString>{{Shape [{height} x {width}]}}</DisplayString>
    <Expand>
        <CustomListItems>
          <Variable Name="i" InitialValue="0" />
          <Loop>
            <Break Condition="i == height" />
            <Item>(values + (i * width)), 2</Item>
            <Exec>i++</Exec>
          </Loop>
        </CustomListItems>
      </Expand>
  </Type>
</AutoVisualizer>

Результаты в этом выводе, который почти идеален. enter image description here

  • I wi sh адреса не будут отображаться
  • I w * sh Я мог бы дать спецификатор пользовательского формата для элементы (что-то вроде% .2f)

Но я обманул в своем натвисе. Я написал <Item>(values + (i * width)), 2</Item> 2 - ширина строки. Но если я напишу width вместо 2, он выдаст 2 вместо строк. Очевидно, он печатает значение width, что бесполезно.

enter image description here

Кто-нибудь знает, как я могу сделать эти строки переменного размера?

...