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*
在基类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
以使工具提示显示基类(void*
)中的E1
? 最佳答案
将类型从void*
强制转换为模板类型T
(您可以在.natvis文件中将其作为$ T1获得)
<Type Name="E2<*>">
<SmartPointer Usage="Minimal">($T1*)atBase</SmartPointer>
<DisplayString>{($T1*)atBase}</DisplayString>
</Type>
关于c++ - 使.natvis将SmartPointer <T>显示为static_cast <T *>(void *),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46021430/