我正在处理模板化程度很高的代码,现在需要弄清楚模板参数的类型。
在下面简化的代码中,你如何调试以找出每个 T 取决于main()的类型,它将使用int,double或任何其他类型启动A.
template <class T>
class A // 1
{
public:
typedef T Type;
};
template <class T>
class A<T*> // 2
{
public:
typedef T Type;
};
template <class T>
class A<T**> // 3
{
pbulic:
typedef T Type;
};
我尝试使用观看窗口,但我认为它无法帮助我了解T的实际类型。
如果T是int *,那么在模板化代码的实例化形式中看到代码就是最好的了。
class A // 1
{
public:
typedef int* Type;
};
提前致谢。
答案 0 :(得分:4)
也许我误解了你想要的东西,但是(即使在蹩脚的旧MSVS 2003中)Watch(或Auto)窗口通过“Type”栏为我做得很好:
请注意,在一个程序中T
可以为不同的实例化采用许多不同的类型(例如,我在图片中的小程序中只有三个),因此询问什么类型{{1}是没有意义的在特定实例化的上下文之外。
如果您正在逐步操作模板化类的方法,并在Watch窗口中检查T
的类型,则可以在调用堆栈中看到它: