能否让Doxygen合并成员组?

3

我正在使用doxygen来记录C++代码。假设我有两个类:Base和派生自Base的Derived类。我在Base和Derived类中都有一个名为Foo的成员组。是否可能使doxygen在Derived类的文档中显示一个名为Foo的单个组,而不是像我现在观察到的那样拥有两个完全相同名称的组?


你是在文档中使用 INLINE_INHERITED_MEMB 来显示派生类的基类成员,对吗? - pmr
@pmr 是的,我有。我没有看到其他相关选项。 - Gennadiy Rozental
经过一些实验,我认为这是不可能的。你可能想在错误跟踪器中提交一个功能请求。 - pmr
1个回答

2

我对doxygen的一个检查进行了修补,以实现此功能。 以下是该补丁。 我没有在生成的文档中注意到任何不良影响。 实现的缺点是它是一个O(n ^ 2)算法,其中n是成员组的数量。 在我的情况下,成员组的数量足够小,使得复杂度不会困扰我。

Index: src/util.cpp
===================================================================
--- src/util.cpp    (revision 848)
+++ src/util.cpp    (working copy)
@@ -5759,6 +5759,24 @@
           (*ppMemberGroupSDict)->setAutoDelete(TRUE);
         }
         MemberGroup *mg = (*ppMemberGroupSDict)->find(groupId);
+
+        uint ngrps = (*ppMemberGroupSDict)->count();
+        const char * ghs = info->header;
+        int          gid = groupId;
+        for (uint i=0; i != ngrps; ++i)
+        {
+          MemberGroup *tg = (*ppMemberGroupSDict)->at(i);
+          MemberListIterator oli(*(tg->members()));
+          MemberDef *omd = oli.current();
+          const char * ohs = Doxygen::memGrpInfoDict[omd->getMemberGroupId()]->header;
+          int          oid = tg->groupId();
+          if ( ghs && ohs && strcmp(ghs, ohs) == 0)
+          {
+            mg = tg;
+            break;
+          }
+        }
+
         if (mg==0)
         {
           mg = new MemberGroup(

代码的工作原理是扫描成员组字典中已有的组,查找是否有与目标组(即标题)相同的组。如果找到这样的组,则将该组用作要插入的成员的成员组。

2
为什么不请求将您的补丁包含在Doxygen中?我认为这应该是默认行为,或者至少应该是可选的,但无论如何都应该包含在Doxygen中。 - noun
我准备了一个补丁,但是在1.8.4版本发布后,开发从svn转移到了git。doxygen 1.8.4以不同的格式呈现文档,我无法在该版本中轻松地复制问题。与此同时,我没有更多的时间来处理它,但是当准备好时,我会提交一个补丁。 - Timmie Smith
如果补丁已经被采纳,您能提供启用它的配置选项吗?我已经尝试了两个小时左右... 如果没有采纳,您能说明一下,这样我就知道我的努力是徒劳的。 - jww
补丁没有被采纳。当时我无法在1.8.4的示例中重现此问题。我需要重新审视这个问题,因为我应该更新使用的doxygen版本来构建我的文档,但这不会在新年之前发生。 - Timmie Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接