首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NatVis显示枚举的子串

NatVis显示枚举的子串
EN

Stack Overflow用户
提问于 2019-12-02 23:06:20
回答 2查看 364关注 0票数 3

我们经常使用前缀作为枚举。

在NatVis中显示全名非常冗长。

是否可以删除枚举名的前缀(也称为枚举名的返回子字符串)?

代码语言:javascript
复制
enum FooFormat {
  FooFormat_Foo,
  FooFormat_Bar,
  FooFormat_Baz,
  FooFormat_COUNT
};

struct Bar {
  FooFormat format;
};
代码语言:javascript
复制
<AutoVisualizer>
  <Type Name="Bar">
    <DisplayString>fmt={format,How-to-get-substring-of-enum-name-?}</DisplayString>
  </Type>
</AutoVisualizer>
EN

回答 2

Stack Overflow用户

发布于 2019-12-30 18:01:43

这不起作用:

代码语言:javascript
复制
<Type Name="FooFormat">
  <DisplayString Condition="this==FooFormat::FooFormat_Foo">Foo</DisplayString>
  <DisplayString Condition="this==FooFormat::FooFormat_Bar">Bar</DisplayString>
  <DisplayString>"bla"</DisplayString>
</Type>

但幸运的是,这是可行的。当然,只有在您的格式字符串不依赖于太多变量的情况下,这才是可行的,否则您可能会得到大量的条件DisplayStrings。

代码语言:javascript
复制
<Type Name="Bar">
  <DisplayString Condition="format==FooFormat::FooFormat_Foo">fmt=Foo</DisplayString>
  <DisplayString Condition="format==FooFormat::FooFormat_Bar">fmt=Bar</DisplayString>
  <DisplayString>fmt={format}</DisplayString>
</Type>

另一种方法是,如果您使用的是C++11或更高版本,我会使用作用域枚举(enum class FooFormat { Foo, Bar, Baz, COUNT };)。这些方法比常规的枚举要好一些,并且您可以编写FooFormat::Foo而不是FooFormat_Foo。因此,您仍然拥有冗长的代码,但是枚举值具有较短的标识符,并且natvis仅显示Foo。当然,这只适用于C++,而不适用于C。

票数 2
EN

Stack Overflow用户

发布于 2020-02-07 20:53:20

使用format specifier en执行以下操作:

代码语言:javascript
复制
<AutoVisualizer>
  <Type Name="Bar">
    <DisplayString>fmt={format,en}</DisplayString>
  </Type>
</AutoVisualizer>

例如:

代码语言:javascript
复制
Bar f;
f.format = FooFormat_Bar;
... // breakpoint here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59141655

复制
相关文章

相似问题

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