Хорошо, у меня есть довольно простой класс, использующий стирание типов с использованием общего указателя.
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>
Поэтому, конечно, мой вопрос: как мне пройти по «дереву», чтобы добраться до члена «prop» структуры PropModel?Не имеет значения, должен ли сам класс быть изменен, или это просто чистый натвис - до тех пор, пока сохраняется стирание типа, и мне не нужно расширять 4 элемента, чтобы добраться до данных.
Заранее спасибо за любую помощь.