如何在 Doxygen xml 输出中识别 C++ 结构中联合的成员

时间:2021-03-26 17:36:14

标签: doxygen

当我在 Doxygen 中为包含联合的 C++ 结构生成 xml 输出时,我可以识别联合结束的位置,但无法识别联合开始的位置。 xml 输出如何指示联合的开始位置?

例如,如果我解析这个 D3D12 结构:

typedef struct D3D12_RESOURCE_BARRIER {
  D3D12_RESOURCE_BARRIER_TYPE  Type;
  D3D12_RESOURCE_BARRIER_FLAGS Flags;
  union {
    D3D12_RESOURCE_TRANSITION_BARRIER Transition;
    D3D12_RESOURCE_ALIASING_BARRIER   Aliasing;
    D3D12_RESOURCE_UAV_BARRIER        UAV;
  };
} D3D12_RESOURCE_BARRIER;

我得到一个 memberdef ,其类型在联合的最后一个成员之后以 union 开头,但这似乎没有包含足够的信息来识别联合的开始:

      <sectiondef kind="public-attrib">
      <memberdef kind="variable" id="struct_d3_d12___r_e_s_o_u_r_c_e___b_a_r_r_i_e_r_1ab6ad811122cbe7f71a5f3675b54c59b4" prot="public" static="no" mutable="no">
        <type><ref refid="d3d12__xs_8h_1ace7558c2b566b01eb8f0f974970462fd" kindref="member">D3D12_RESOURCE_BARRIER_TYPE</ref></type>
        <definition>D3D12_RESOURCE_BARRIER_TYPE D3D12_RESOURCE_BARRIER::Type</definition>
        <argsstring></argsstring>
        <name>Type</name>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
      </memberdef>
      <memberdef kind="variable" id="struct_d3_d12___r_e_s_o_u_r_c_e___b_a_r_r_i_e_r_1a1a1425ffd80baf51a5ad13a0eb2df11f" prot="public" static="no" mutable="no">
        <type><ref refid="d3d12__xs_8h_1a513a291100449ffb8d68dde9c8baafaf" kindref="member">D3D12_RESOURCE_BARRIER_FLAGS</ref></type>
        <definition>D3D12_RESOURCE_BARRIER_FLAGS D3D12_RESOURCE_BARRIER::Flags</definition>
        <argsstring></argsstring>
        <name>Flags</name>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
      </memberdef>
      <memberdef kind="variable" id="struct_d3_d12___r_e_s_o_u_r_c_e___b_a_r_r_i_e_r_1af2894e6907d168f85389eafad5ff4468" prot="public" static="no" mutable="no">
        <type><ref refid="struct_d3_d12___r_e_s_o_u_r_c_e___t_r_a_n_s_i_t_i_o_n___b_a_r_r_i_e_r" kindref="compound">D3D12_RESOURCE_TRANSITION_BARRIER</ref></type>
        <definition>D3D12_RESOURCE_TRANSITION_BARRIER D3D12_RESOURCE_BARRIER::Transition</definition>
        <argsstring></argsstring>
        <name>Transition</name>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
      </memberdef>
      <memberdef kind="variable" id="struct_d3_d12___r_e_s_o_u_r_c_e___b_a_r_r_i_e_r_1af61e6bf0958d3c00262ca7fe992b175f" prot="public" static="no" mutable="no">
        <type><ref refid="struct_d3_d12___r_e_s_o_u_r_c_e___a_l_i_a_s_i_n_g___b_a_r_r_i_e_r" kindref="compound">D3D12_RESOURCE_ALIASING_BARRIER</ref></type>
        <definition>D3D12_RESOURCE_ALIASING_BARRIER D3D12_RESOURCE_BARRIER::Aliasing</definition>
        <argsstring></argsstring>
        <name>Aliasing</name>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
      </memberdef>
      <memberdef kind="variable" id="struct_d3_d12___r_e_s_o_u_r_c_e___b_a_r_r_i_e_r_1ab8e70b55235a48bdd0e357f341bd233c" prot="public" static="no" mutable="no">
        <type><ref refid="struct_d3_d12___r_e_s_o_u_r_c_e___u_a_v___b_a_r_r_i_e_r" kindref="compound">D3D12_RESOURCE_UAV_BARRIER</ref></type>
        <definition>D3D12_RESOURCE_UAV_BARRIER D3D12_RESOURCE_BARRIER::UAV</definition>
        <argsstring></argsstring>
        <name>UAV</name>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
      </memberdef>
      <memberdef kind="variable" id="struct_d3_d12___r_e_s_o_u_r_c_e___b_a_r_r_i_e_r_1ab309192116241523db001099c26eb3e6" prot="public" static="no" mutable="no">
        <type>union D3D12_RESOURCE_BARRIER::@51</type>
        <definition>union D3D12_RESOURCE_BARRIER::@51 D3D12_RESOURCE_BARRIER::@52</definition>
        <argsstring></argsstring>
        <name>@52</name>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
      </memberdef>

在这种情况下,我可能可以通过查找 kindref="compound" 来识别联合的成员,但是像 int 这样的内置值在类型字段中没有 ref,因此该方法不适用于所有结构.

0 个答案:

没有答案
相关问题