使 .natvis 将 SmartPointer<T> 显示为 static_cast<T*>(void*)
make .natvis show SmartPointer<T> as static_cast<T*>(void*)
E2<T>
是智能指针。
要在鼠标悬停在其上方时启用 E2<T>->aField
的工具提示,我可以创建 .natvis
,例如:-
.cpp
class Blank{
public: int sss=5;
};
template<class T> class E2 {
public: T* operator->(){
return static_cast<T*>(atDerive);
}
T* atDerive; //#
};
int main(){
Blank k2; k2.sss=32;
E2<Blank> e2;
e2.atDerive=&k2;
e2->sss=4;
}
.natvis
<Type Name="E2<*>">
<SmartPointer Usage="Minimal">atDerive</SmartPointer>
</Type>
结果
问题
如果内容 void*
在基础 class E1
.
中,上述方法将不起作用
.cpp
class E1{
public: void* atBase=nullptr; //#
};
template<class T> class E2 : public E1{
public: T* operator->(){
return static_cast<T*>(atBase);
}
};
int main(){
Blank k; k.sss=31;
E2<Blank> e2;
e2.atBase=&k;
e2->sss=4;
}
.natvis(不起作用 - 没有出现工具提示)
<Type Name="E2<*>">
<SmartPointer Usage="Minimal">atBase</SmartPointer>
</Type>
问题
如何修改 .natvis
以启用工具提示以显示基数 class (E1
) 中的 void*
?
添加从 void*
到模板类型 T
的类型转换(您可以在 .natvis 文件中将其作为 $T1 获取)
<Type Name="E2<*>">
<SmartPointer Usage="Minimal">($T1*)atBase</SmartPointer>
<DisplayString>{($T1*)atBase}</DisplayString>
</Type>
E2<T>
是智能指针。
要在鼠标悬停在其上方时启用 E2<T>->aField
的工具提示,我可以创建 .natvis
,例如:-
.cpp
class Blank{
public: int sss=5;
};
template<class T> class E2 {
public: T* operator->(){
return static_cast<T*>(atDerive);
}
T* atDerive; //#
};
int main(){
Blank k2; k2.sss=32;
E2<Blank> e2;
e2.atDerive=&k2;
e2->sss=4;
}
.natvis
<Type Name="E2<*>">
<SmartPointer Usage="Minimal">atDerive</SmartPointer>
</Type>
结果
问题
如果内容 void*
在基础 class E1
.
.cpp
class E1{
public: void* atBase=nullptr; //#
};
template<class T> class E2 : public E1{
public: T* operator->(){
return static_cast<T*>(atBase);
}
};
int main(){
Blank k; k.sss=31;
E2<Blank> e2;
e2.atBase=&k;
e2->sss=4;
}
.natvis(不起作用 - 没有出现工具提示)
<Type Name="E2<*>">
<SmartPointer Usage="Minimal">atBase</SmartPointer>
</Type>
问题
如何修改 .natvis
以启用工具提示以显示基数 class (E1
) 中的 void*
?
添加从 void*
到模板类型 T
的类型转换(您可以在 .natvis 文件中将其作为 $T1 获取)
<Type Name="E2<*>">
<SmartPointer Usage="Minimal">($T1*)atBase</SmartPointer>
<DisplayString>{($T1*)atBase}</DisplayString>
</Type>