2012-06-07 13 views
5

Tôi đang làm việc để ghi lại mã hỗn hợp C++/fortran cũ bằng cách sử dụng doxygen (phiên bản 1.8.0 trên máy xubuntu 12.04). Dấu chấm của tôi, đồ thị cuộc gọi và biểu đồ người gọi đang hoạt động chính xác trừ khi stl std :: lớp vectơ đang được sử dụng.Hỗ trợ Doxygen STL sử dụng biểu đồ chấm

Tôi có một số lớp foo cần chứa vectơ của một thanh lớp khác.

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

Lớp thanh chứa nhiều chức năng như "SOME_FUNCTION()". Khi hàm trong lớp foo gọi SOME_FUNCTION: d_bars[i].SOME_FUNCTION();, biểu đồ người gọi chỉ được tạo khi d_bars được khai báo theo cách thứ hai. Điều này không làm việc với mã hiện tại và cần phải làm việc trong khi được khai báo trong phương thức đầu tiên bằng cách sử dụng lớp vectơ stl.

Tôi đã có BUILTIN_STL_SUPPORT = YES. Tôi biết mã của tôi không hoàn hảo ở trên. Tôi hy vọng bạn có thể bắt trôi. Mã của tôi khá lớn, vì vậy tôi đã cố gắng đơn giản hóa nó.

Trả lời

0

Bạn nên bật tùy chọn BUILTIN_STL_SUPPORT.

+0

Quên đề cập đến mà tôi đã thực hiện. –

1

Tôi không biết liệu điều này có giúp được gì hay không, dù sao thì ai cũng biết.

Tôi đã có chính xác cùng một vấn đề như bạn có: Tôi có hai lớp và một trong số họ có một véc tơ của lớp khác. Thậm chí tệ hơn, tôi đã tạo ra shared_pointers và sau đó tạo ra vectơ đó.

Giải pháp duy nhất tôi phải này, đã sử dụng sed .. vâng, thực sự ... Ví dụ:

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_; 
}; 

tôi đã thay đổi nó bằng cách sử sed (sed -e 's/VecA_\[i\]-^>/VecA_\./; s/std::vector^<std::shared_ptr^<A^>^>/A/') (tôi sử dụng "^" vì tôi trên cửa sổ và đó là các ký tự thoát mà làm việc cho ">"), thu thập:

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_; 
}; 

Cuối cùng, tôi cấu hình doxygen với:

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

tẻ nhạt? vâng, tất nhiên ... Nhưng nó phù hợp với tôi và đây là cách duy nhất để tôi có thể thực hiện công việc này!

Hy vọng điều này sẽ giúp