C++ C++;部分模板专门化与Natvis

C++ C++;部分模板专门化与Natvis,c++,visual-studio,template-specialization,natvis,C++,Visual Studio,Template Specialization,Natvis,我正在尝试为部分专用类型创建VisualStudio调试可视化工具。例如,假设我有这样的东西: template <typename T> struct Foo { T bar; }; template <typename T> struct Foo<T*> { T baz; }; 模板 结构Foo { T形杆; }; 模板 结构Foo { T-baz; }; 如果没有部分专业化,这将很容易: <Type Name="Foo&

我正在尝试为部分专用类型创建VisualStudio调试可视化工具。例如,假设我有这样的东西:

template <typename T>
struct Foo
{
    T bar;
};

template <typename T>
struct Foo<T*>
{
    T baz;
};
模板
结构Foo
{
T形杆;
};
模板
结构Foo
{
T-baz;
};
如果没有部分专业化,这将很容易:

<Type Name="Foo&lt;*&gt;"> ... </Type>
。。。
完全专业化也很容易:

<Type Name="Foo&lt;int&gt;"> ... </Type>
。。。

但是我如何涵盖部分专业化呢?这是否得到支持?如果没有,是否有解决办法?

简短回答-否。您不能在natvis type name
中指定类型限定符、引用等

但是:

您可以将模板的typename参数用作字符串,并与类型进行比较。例如,在节点的
条件
属性中:


专业化短
专业化国际及;
未指明的专门化
对于
Foo
您将看到
specialization short
unspecified specialization

例如:

template <typename T>
struct Foo
{
    T bar;
};

template <typename U>
struct Foo<U &>
{
    U baz;
};
int main()
{
    int g = 0;
    Foo<short> a;
    Foo<int> b;
    Foo<int &> c{g};
模板
结构Foo
{
T形杆;
};
模板
结构Foo
{
乌巴兹;
};
int main()
{
int-gg=0;
福阿;
富b;
富科;
纳特维斯:

<Type Name="Foo&lt;*&gt;">
  <DisplayString>partial specialization {baz}</DisplayString>
</Type>

<Type Name="Foo&lt;*&gt;" Priority="Low">
  <DisplayString>other specialization</DisplayString>
</Type>

专业化短
未指明的专门化
部分专业化国际及;
结果:

或者,如果您的部分专用类型中有一些独特的成员,则可以使用
优先级
选项

例如:

template <typename T>
struct Foo
{
    T bar;
};

template <typename U>
struct Foo<U &>
{
    U baz;
};
int main()
{
    int g = 0;
    Foo<short> a;
    Foo<int> b;
    Foo<int &> c{g};
模板
结构Foo
{
T形杆;
};
模板
结构Foo
{
乌巴兹;
};
int main()
{
int g=0;
福阿;
富b;
Foo c{g};
纳特维斯:

<Type Name="Foo&lt;*&gt;">
  <DisplayString>partial specialization {baz}</DisplayString>
</Type>

<Type Name="Foo&lt;*&gt;" Priority="Low">
  <DisplayString>other specialization</DisplayString>
</Type>

部分特化{baz}
其他专业
结果:


Foo
是一种完全专业化的语法。对于
模板Foo
,这种语法是如何工作的?感谢您的帮助性说明!:)