Doxygen支持使用点图表来展示STL。

5

我正在使用doxygen(版本1.8.0,运行在xubuntu 12.04机器上)记录一个遗留的C++/Fortran混合代码。我的dot_graphs、调用图和调用者图都能正常工作,但是当使用stl std::vector类时出现问题。

我有一个类foo,需要包含另一个类bar的向量。

class foo
{
  //What i'd like to do (1)
  std::vector<bar> d_bars
  //What works (2)
  bar* d_bars
};
class bar
{
  SOME_FUNCTION();
}

The bar类包含各种函数,如“SOME_FUNCTION()”。 当foo类中的函数调用SOME_FUNCTION时:d_bars[i].SOME_FUNCTION(); 只有在以第二种方式声明d_bars时才生成调用者图。 这无法与当前代码一起工作,需要在使用stl vector类声明的第一种方法中正常工作。
我已经拥有BUILTIN_STL_SUPPORT = YES。 我知道上面的代码并不完美。 希望您能理解我的意思。 我的代码非常庞大,因此我尝试简化它。
2个回答

1

我不知道这是否有帮助,但无论如何,谁知道呢。

我遇到了与你完全相同的问题:我有两个类,其中一个类有另一个类的向量。更糟糕的是,我生成了 shared_pointers,然后创建了那个向量。

我唯一找到的解决方法就是使用 sed... 是的,真的... 例如:

class A
{
public:
    A() {};
    ~A() {};
    DoSomeThingA(){
        AA_ = 0;
    };
private:
    int AA_;
};

class B
{
public:
    B() {};
    ~B(){};
    DoSomeThingB(){
        for (size_t i = 0; i < VecA_.size(); i++)
        {
            VecA_[i]->DoSomeThingA();
        }
    };
private:
    std::vector<std::shared_ptr<A>> VecA_;
};

我使用sed进行了更改 (sed -e 's/VecA_\[i\]-^>/VecA_\./; s/std::vector^<std::shared_ptr^<A^>^>/A/') (我使用"^",因为我在Windows上,这是适用于">"的转义字符),得到:
class A
{
public:
    A() {};
    ~A() {};
    DoSomeThingA(){
        AA_ = 0;
    };
private:
    int AA_;
};

class B
{
public:
    B() {};
    ~B(){};
    DoSomeThingB(){
        for (size_t i = 0; i < VecA_.size(); i++)
        {
            VecA_.DoSomeThingA();
        }
    };
private:
    A VecA_;
};

最后,我使用以下配置来配置doxygen:

INPUT_FILTER = sed -e 's/VecA_\[i\]-^>/VecA_\./; s/std::vector^<std::shared_ptr^<A^>^>/A/'

FILTER_SOURCE_FILES = yes

SOURCE_BROWSER = yes

VERBATIM_HEADERS = no

繁琐吗?是的,当然... 但这对我有效,这是我能够使其工作的唯一方法!

希望有所帮助。


1

您应该打开选项BUILTIN_STL_SUPPORT


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