Получение ссылок 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.