首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让.natvis将SmartPointer<T>显示为static_cast<T*>(void*)

让.natvis将SmartPointer<T>显示为static_cast<T*>(void*)
EN

Stack Overflow用户
提问于 2017-09-03 08:02:47
回答 1查看 1K关注 0票数 0

E2<T>是一个智能指针。

为了启用E2<T>->aField的工具提示,当鼠标悬停在它上面时,我可以创建.natvis如下:-

.cpp

代码语言:javascript
复制
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

代码语言:javascript
复制
  <Type Name="E2&lt;*&gt;">
    <SmartPointer Usage="Minimal">atDerive</SmartPointer>
  </Type>

结果

问题

如果内容void*位于基类E1中,则上述方法无法工作。

.cpp

代码语言:javascript
复制
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 (不工作-没有工具提示出现)

代码语言:javascript
复制
  <Type Name="E2&lt;*&gt;">
    <SmartPointer Usage="Minimal">atBase</SmartPointer>
  </Type>

问题

如何修改.natvis以使工具提示显示基类(E1)中的void*

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-04 10:20:15

将从void*转换到模板类型T的类型添加到模板类型T(您可以在.natvis文件中将其作为$T1获得)

代码语言:javascript
复制
<Type Name="E2&lt;*&gt;">
  <SmartPointer Usage="Minimal">($T1*)atBase</SmartPointer>
  <DisplayString>{($T1*)atBase}</DisplayString>
</Type>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46021430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档