我有一个看起来大致像这样的数据结构
struct Column
{
void* data;
};
template <class... T>
struct Table
{
size_t count;
std::vector<Column> columns; // columns.size() == sizeof...(T)
};
我正在尝试通过以下方式将其可视化
+ Table
+ Column 0
item 1
item 2
...
+ Column 1
item 1
item 2
...
这是我到目前为止所拥有的:
<Type Name="Table<*>">
<Expand>
<Synthetic Name="Column 0">
<Expand>
<ArrayItems>
<Size>count</Size>
<ValuePointer>($T1*) columns[0].data</ValuePointer>
</ArrayItems>
</Expand>
</Synthetic>
<Synthetic Name="Column 1" Condition="columns.size() > 1">
<Expand>
<ArrayItems>
<Size>count</Size>
<ValuePointer>($T2*) columns[1].data</ValuePointer>
</ArrayItems>
</Expand>
</Synthetic>
</Expand>
</Type>
显然,这扩展性很差。我只能复制粘贴每一列的代码并添加一个Condition
来启用或禁用它。我将得到支持的最大列数,之后可视化将停止显示列。
有什么方法可以更智能地显示这个吗?如果我可以使用类似$T$i
.
我真正想做的是这样的:
<Type Name="Table<*>">
<Expand>
<ArrayItems>
<Size>columns.size()</Size>
<Value>
<Synthetic Name="Column %i">
<Expand>
<ArrayItems>
<Size>count</Size>
<ValuePointer>($T$i2*) columns[$i2].data</ValuePointer>
</ArrayItems>
</Expand>
</Synthetic>
</Value>
</ArrayItems>
</Expand>
</Type>