【问题标题】:Getting shared_ptr refs to appear in doxygen collaboration diagrams让 shared_ptr refs 出现在 doxygen 协作图中
【发布时间】:2011-01-22 07:47:10
【问题描述】:

我已经做了足够多的谷歌搜索知道如果我有什么 喜欢

class SubObject {

public:
//blah blah blah
};

class Aggregate {
public:
   boost::shared_ptr<SubObject>   m_ptr;
};

我可以让 Doxygen 创建“正确”的协作图 如果我有一个像

这样的虚拟声明
namespace boost { template<class T> class shared_ptr { T *dummy; }; }

在我的头文件中。

我的问题是:我如何让它在我的所有项目中发挥作用 以及我所有的标题,而不必实际包含该行 在每个文件中?

【问题讨论】:

    标签: c++ boost doxygen shared-ptr


    【解决方案1】:

    呵呵....我觉得自己回答自己的问题很愚蠢,但我在发布后马上就解决了这个问题:

    把代码sn-p

    namespace boost { template<class T> class shared_ptr { T *dummy; }; }
    

    在一个名为“doxygen_dummy.h”之类的头文件中,并确保它包含在项目的工作区或目录中。您实际上不需要在任何地方#include 它(实际上,您不想这样做,以避免违反单一定义规则)。您只需要 Doxygen 在扫描您的所有文件时能够看到它。

    【讨论】:

      【解决方案2】:

      感谢埃里克,这很有效。但是,我不喜欢扩展我的协作图的额外虚拟类,因此在此基础上进行了更多酝酿。此 Doxyfile 设置将所有 boost::smart_ptr 代码更改为 T*。这绕过了 smart_ptr 并创建了到协作图中类型的直接链接。

      INPUT_FILTER = "sed 's/boost::shared_ptr<\(.*\)>/\1*/'"
      

      这可能不是您想要的最终文档,因为它确实将所有对 smart_ptr 的引用隐藏为普通指针,但协作图变得更具可读性。

      【讨论】:

      • 我喜欢这个解决方案——我目前只使用 doxygen 进行内部文档和我的 SW 设计的可视化,所以有一个虚拟标题很麻烦,特别是如果你经常git clean 工作区。
      • 使用 sed 解决方案很难让 s/// 表达式在所有情况下都正确。例如,考虑 boost::shared_ptr<:vector> >。但是您可以轻松地将 shared_ptr 和 vector(以及您正在使用的任何其他库模板类)添加到您的 doxygen_dummy.h。
      【解决方案3】:

      这个问题可能已经过时了,但我尝试了 MattiasF 的解决方案,但它并不完美(我不是在责备)。

      IMO,使用 doxygen_dummy 标头不是针对 shared_ptr 的正确解决方案。 shared_ptr 类仅用于内存管理,在 Doxygen 文档中肯定不需要。

      在工作中,我使用带有 sed 的 INPUT_FILTER。我找到了一个很好的模式(mem:: 是一个命名空间别名):

      INPUT_FILTER = "sed -e \"s/mem::shared_ptr<\([a-zA-Z0-9_]*\)> /\1* /g\" -e \"s/mem::shared_ptr<\(.*\)> /\1* /g\""
      

      第一个模式匹配所有带有简单模板的 shared_ptr,这意味着没有模板的类型。 第二个模式匹配所有其他 shared_ptr 任何复杂类型的模板(带有模板)。

      我发现了一个缺点:尚未处理包含'::'的完整名称作为模板。 我还没有完成的解决方案是在第一个 sed 的模式中添加一个“字符”::。

      【讨论】:

      • 这也是一个有趣的解决方案。谢谢。
      猜你喜欢
      • 2013-03-09
      • 2016-08-12
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      相关资源
      最近更新 更多