Получение ссылок shared_ptr на диаграммы сотрудничества doxygen - PullRequest
14 голосов
/ 01 марта 2010

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

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

в моем заголовочном файле.

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

Ответы [ 3 ]

11 голосов
/ 02 марта 2010

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

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

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

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

6 голосов
/ 26 января 2012

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

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

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

2 голосов
/ 09 июля 2015

Вопрос, возможно, устарел, но я попробовал решение 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.

...