使用dot/Doxygen生成协作图,无需CRTP递归。

3
我正在研究奇妙的递归模板模式(CRTP),并希望为我的派生类生成协作图。当我在项目上运行doxygen时,我得到了如下的图表:

enter image description here

我在这里限制了图的最大深度。但我仍然不喜欢重复的左分支。有没有可能忽略其中一个节点(objective_barrier或objective_barrier<objective_dense...>),或将它们合并在一起?

编辑: 非默认的doxygen设置:

# Difference with default Doxyfile 1.8.17
EXTRACT_ALL            = YES
RECURSIVE              = YES
UML_LOOK               = YES
TEMPLATE_RELATIONS     = YES
CALL_GRAPH             = YES
CALLER_GRAPH           = YES
DOT_CLEANUP            = NO

以下是更简单的示例:
template <typename Derived>
class A_
{
    void foo()
    {
        static_cast<Derived*>(this)->foo();
    }
};

class B_ : public A_<B_>
{
    void foo()
    {

    }
};

生成这个:

enter image description here


1
很可能无法忽略这一点,但是因为没有可以尝试的东西...那么使用哪个版本的doxygen?请还提供一个小例子(包括与默认doxygen设置不同的设置:doxygen -x),以便我们可以测试一些东西。 - albert
1
看起来你忘记提到你也有 HAVE_DOT=YES,或者这是一个系统,在这个系统中,执行文件已经被分发/打包人员通过设置其他默认值而不是标准的doxygen默认值进行了操作(标准的doxygen默认值为HAVE_DOT=NO)。注意:这不是你的错,设置HAVE_DOT=YES也很容易。你可能还应该看一下HAVE_DOT=NO和单独的情况,其中TEMPLATE_RELATIONS=NO(虽然可能会产生其他对你不想要的影响)。 - albert
1个回答

0

正如Albert所提到的,可以禁用模板关系:

TEMPLATE_RELATIONS=NO

这导致了以下的图表:

enter image description here


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