Получение ссылок shared_ptr на диаграммы совместной работы doxygen

Я сделал достаточно, чтобы понять, что если у меня что-то есть как

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

в моем файле заголовка.

Мой вопрос: как мне получить это, чтобы работать над всеми моими проектами и все мои заголовки, без необходимости включать эту строку в каждом файле?

Ответы

Ответ 1

Хе-хе.... Я чувствую себя глупо, отвечаю на свои вопросы, но я считаю, что это очень многое после публикации:

Поместите фрагмент кода

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

в файле заголовка, называемом "doxygen_dummy.h", и убедитесь, что он включен в рабочую область или каталог проекта. Вам не нужно на самом деле # включать его в любом месте (на самом деле, вы не хотите, чтобы не нарушать правило одного определения). Вам просто нужно, чтобы Doxygen смог увидеть его, когда он просматривает все ваши файлы.

Ответ 2

Спасибо Эрик, это сработало. Однако мне не нравились дополнительные фиктивные классы, расширяющие мои диаграммы сотрудничества, которые так варили на этом немного больше. Этот параметр Doxyfile изменяет весь код boost:: smart_ptr на T *. Это обходит smart_ptr и создает прямую ссылку на тип диаграммы совместной работы.

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

Это, вероятно, не то, что вы хотите для окончательных документов, поскольку оно действительно скрывает все ссылки на smart_ptr как простой указатель, но диаграммы сотрудничества становятся более читабельными.

Ответ 3

Вопрос может быть устаревшим, но я попробовал решение MattiasF, которое не идеально (я не обвиняю).

IMO, использует заголовок doxygen_dummy в некотором правильном решении для shared_ptr. Класс shared_ptr - это только назначение управления памятью и, безусловно, не требуется в документации Doxygen.

На работе я использую INPUT_FILTER с sed. Я нахожу хороший шаблон (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.