好的,所以我有一个非常简单的类,它使用类型擦除,使用共享指针。
class Prop
{
struct PropConcept
{
virtual ~PropConcept() {}
};
template<typename T>
struct PropModel : PropConcept
{
PropModel(const T& t) : prop(t) { }
PropModel() {}
virtual ~PropModel() {}
private:
T prop;
};
std::shared_ptr<PropConcept> prop;
public:
template<typename T>
Prop(const T& obj) : prop(new PropModel<T>(obj)) { }
Prop() {};
};
这里没有问题,但是由于它的工作方式,调试器显示了从 Prop 到 std::shared_ptr(PropContent) 再到 PropModel 的完整链,最后是包含实际数据的底层模板化 prop。
我想做的是编写一个 natvis 规则来显示底层数据,而不是整个链。不幸的是,我得到的最远的是取消引用指针,这让我只剩下它指向的 PropConcept 结构。
<Type Name="Prop">
<DisplayString>{*prop}</DisplayString>
<Expand>
<Item Name="prop">(*prop)</Item>
</Expand>
</Type>
所以当然,我的问题是,我如何遍历“树”以到达 PropModel 结构的“道具”成员?类本身是否需要调整,或者它是否只是纯 natvis 都没关系——只要类型擦除仍然存在,我不必扩展 4 个项目来获取数据。
提前感谢您的帮助。