我正在尝试添加到 Eigen.natvis,在此处找到,以便Eigen::Map
也可以在 Visual Studio 调试器中读取对象,在此处找到 Eigen库。
这是我放在一起的:
<Type Name="Eigen::Map<Eigen::Matrix<*,-1,-1,*,*,*>,*,*>">
<DisplayString Condition="m_data == 0">empty</DisplayString>
<DisplayString Condition="m_data != 0">Map[{m_rows.m_value}, {m_cols.m_value}] (dynamic matrix)</DisplayString>
<Expand>
<ArrayItems Condition="Flags%2"> <!-- row major layout -->
<Rank>2</Rank>
<Size>$i==0 ? m_rows.m_value : m_cols.m_value</Size>
<ValuePointer>m_data</ValuePointer>
</ArrayItems>
<ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
<Direction>Backward</Direction>
<Rank>2</Rank>
<Size>$i==0 ? m_rows.m_value : m_cols.m_value</Size>
<ValuePointer>m_data</ValuePointer>
</ArrayItems>
</Expand>
</Type>
我面临的主要问题是这条线(通过反复试验发现):
<Size>$i==0 ? m_rows.m_value : m_cols.m_value</Size>
相反,如果我使用以下任何一种,那么它可以工作,但当然不正确(具体数字常量无关紧要):
<Size>$i==0 ? 4 : 2</Size>
<Size>$i==0 ? 3 : m_cols.m_value</Size>
<Size>$i==0 ? m_rows.m_value : 5</Size>
我错过了什么?我怎样才能让它正确运行?此外, natvis forEigen::Matrix
做了类似的事情,并且确实有效。