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
宏。示例位于VS2015
Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers
文件夹中。

VS2015允许通过自定义配置自定义调试可视化


在其他特性中,它支持模板化类。
Type
元素的
Name
属性接受星号*作为通配符,可用于模板化类名。要在可视化条目中引用模板参数,可以使用
$T1
宏。示例位于VS2015
Microsoft 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]