如何解决如何使用natvis像2d数组一样可视化列顺序矩阵
struct Matrix2d
{
// Column first ordered elements
vector<int> m_elements;
int m_numRows;
int m_numCols;
};
m_elements存储{0、1、2、3、4、5、6、7、8}来表示2d矩阵
0,3,6
1,4,7
2,5,8
我想显示如下: RPA-Python
使用Natvis中的ArrayItems功能,我可以得出以下结论:
使用natvis代码:
<Type Name="Matrix2d">
<Expand>
<ArrayItems>
<Direction>Backward</Direction>
<Rank>2</Rank>
<Size>$i==0?m_numRows:m_numCols</Size>
<ValuePointer>&m_elements[0]</ValuePointer>
</ArrayItems>
</Expand>
</Type>
但这确实很丑陋,我宁愿每一行都是单个项目,而不是每个元素都是一个项目,就像array2d的可视化方式一样。
您将如何在Natvis中编写代码,以便可以以这种方式可视化Matrix2d?
解决方法
对于这样的结构,我更喜欢使用CustomListItems
。在您的情况下,它可能看起来像这样:
<Type Name="Matrix2d">
<Expand>
<CustomListItems>
<Variable Name="i" InitialValue="0"/>
<Loop Condition="i < m_numRows">
<Item Name="{i}">&m_elements[i * m_numCols],[m_numCols]na</Item>
<Exec>++i</Exec>
</Loop>
</CustomListItems>
</Expand>
</Type>
示例:
struct Matrix2d
{
Matrix2d(int r,int c) : m_numRows(r),m_numCols(c),m_elements(r * c,0) {}
// Column first ordered elements
std::vector<int> m_elements;
int m_numRows;
int m_numCols;
};
Matrix2d g(4,3);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。