gpt4 book ai didi

natvis - NATVIS 是否可以递归元组(可变参数模板)?

转载 作者:行者123 更新时间:2023-12-04 01:55:29 24 4
gpt4 key购买 nike

我从这里实现了元组:https://voidnish.wordpress.com/2013/07/13/tuple-implementation-via-variadic-templates/

是否可以使用 NATVIS 对其进行可视化?我做到了

<Type Name="tuple">
<DisplayString>()</DisplayString>
</Type>

<Type Name="tuple&lt;*&gt;">
<DisplayString>({_Myfirst})</DisplayString>
</Type>

如何获取多个类型的 _Myfirst 值,以获取

<Type Name="tuple&lt;*,*&gt;">
<DisplayString>({_Myfirst}, {???})</DisplayString>
</Type>

<Type Name="tuple&lt;*,*,*&gt;">
<DisplayString>({_Myfirst}, {???}, {???})</DisplayString>
</Type>

等等?

最佳答案

您必须稍微修改类型才能使其正常工作。需要的是 base_type typedef。

// tuple 
template<class... _Types> class tuple;

// empty tuple
template<> class tuple<> {};

// recursive tuple definition
template<class _This,
class... _Rest>
class tuple<_This, _Rest...>
: private tuple<_Rest...>
{
public:
typedef tuple<_Rest...> base_type; // ***** Added this line

_This _Myfirst;
};

现在我们可以使用 natvis 声明递归地评估基本类型:

<!-- Handle empty tuples -->
<Type Name="tuple&lt;&gt;">
<DisplayString>()</DisplayString>
<Expand/>
</Type>

<!-- Handle a single parameter (this is also our terminator for recursion) -->
<Type Name="tuple&lt;*&gt;">
<DisplayString IncludeView="noparens">{_Myfirst}</DisplayString>
<DisplayString ExcludeView="noparens">({_Myfirst})</DisplayString>
<Expand>
<Item Name="Value">_Myfirst</Item>
</Expand>
</Type>

<!-- Handle 2 or more items -->
<Type Name="tuple&lt;*,*&gt;">
<!-- show the first item and then recurse by casting this to 'base_type' -->
<DisplayString IncludeView="noparens">{_Myfirst}, {*(base_type *)this,view(noparens)}</DisplayString>
<!-- Wrap our display string that doesn't a have any parentheses, this will be only done for the top level tuple -->
<DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString>
<Expand>
<!-- Show the top level item -->
<Item Name="Value">_Myfirst</Item>
<!-- Recursively expand our base types -->
<ExpandedItem>*(base_type *)this</ExpandedItem>
</Expand>
</Type>

这是结果:

tuple .natvis result

关于natvis - NATVIS 是否可以递归元组(可变参数模板)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36743823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com