C++ 在调试器中自动显示具有已知类型和长度的void*(数组)
假设已知类型C++ 在调试器中自动显示具有已知类型和长度的void*(数组),c++,arrays,visual-studio,debugging,C++,Arrays,Visual Studio,Debugging,假设已知类型T和长度size, 如何在调试器中优雅地显示数组数据 template<class T>class Container{ void* data; //<-- display it! int size; } 问题:他们是否有任何技术(特别是修改容器中的代码)可以使这个过程像std::vector一样自动化和优雅 换句话说,如果我能键入container,那么手表就会显示:- container +data (the + butt
T
和长度size
,
如何在调试器中优雅地显示数组数据
template<class T>class Container{
void* data; //<-- display it!
int size;
}
问题:他们是否有任何技术(特别是修改容器中的代码
)可以使这个过程像std::vector一样自动化和优雅
换句话说,如果我能键入container
,那么手表就会显示:-
container
+data (the + button, can click to expand)
--data[0] (expanded)
--data[1]
......
--data[size-1]
我最好的建议是使用
union
,但我不确定。VS2015允许通过自定义配置进行调试可视化定制
在其他特性中,它支持模板化类。
Type
元素的Name
属性接受星号*作为通配符,可用于模板化类名。要在可视化条目中引用模板参数,可以使用$T1
宏。示例位于VS2015Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers
文件夹中。VS2015允许通过自定义配置自定义调试可视化
在其他特性中,它支持模板化类。
Type
元素的Name
属性接受星号*作为通配符,可用于模板化类名。要在可视化条目中引用模板参数,可以使用$T1
宏。示例位于VS2015Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers
文件夹中。为什么不将数据
声明为T*数据代码>?我想避免使用默认构造函数,所以我使用了placement new@javaLover的默认构造函数是什么<无论是T*
还是void*
,code>data
都是指针。默认构造与仅仅声明T*data
有什么关系?(除了明显的默认指针构造)。@WhozCraig如果我这样做,那么我将不得不调用。。。T*data=newt[size]-->调用的默认构造函数。。。。。。我误解了吗?(我是C++新手)您的用例有点奇怪,但不,您似乎没有误解。是的,new[T]
确实会调用默认构造。你可以通过cast hijinx避免这种情况,但这显然不是解决这个问题的地方,我最终希望你能够跟踪已经构建和尚未构建的内容。至少我知道你想避免什么。为什么不把data
声明为T*data代码>?我想避免使用默认构造函数,所以我使用了placement new@javaLover的默认构造函数是什么<无论是T*
还是void*
,code>data
都是指针。默认构造与仅仅声明T*data
有什么关系?(除了明显的默认指针构造)。@WhozCraig如果我这样做,那么我将不得不调用。。。T*data=newt[size]-->调用的默认构造函数。。。。。。我误解了吗?(我是C++新手)您的用例有点奇怪,但不,您似乎没有误解。是的,new[T]
确实会调用默认构造。你可以通过cast hijinx避免这种情况,但这显然不是解决这个问题的地方,我最终希望你能够跟踪已经构建和尚未构建的内容。至少我明白你在逃避什么。
container
+data (the + button, can click to expand)
--data[0] (expanded)
--data[1]
......
--data[size-1]