5

我正在使用 doxygen(xubuntu 12.04 机器上的 1.8.0 版)记录遗留的 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();
}

bar 类包含各种函数,例如“SOME_FUNCTION()”。当 foo 类中的函数调用 SOME_FUNCTION 时:d_bars[i].SOME_FUNCTION();调用者图仅在 d_bars 以第二种方式声明时生成。这不适用于当前代码,并且需要在使用 stl 矢量类在第一个方法中声明时工作。

我已经有了BUILTIN_STL_SUPPORT = YES。我知道我的代码在上面并不完美。我希望你能赶上漂移。我的代码非常庞大,所以我试图简化它。

4

2 回答 2

1

您应该BUILTIN_STL_SUPPORT打开该选项。

于 2012-06-07T16:20:51.820 回答
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 配置为:

输入过滤器 =sed -e 's/VecA_\[i\]-^>/VecA_\./; s/std::vector^<std::shared_ptr^<A^>^>/A/'

FILTER_SOURCE_FILES = 是

SOURCE_BROWSER = 是

VERBATIM_HEADERS = 否

乏味?是的,当然......但它对我有用,这是我可以完成这项工作的唯一方法!

希望能帮助到你

于 2017-06-14T09:54:54.400 回答