在doxygen的分组重载(Grouping overloads in doxygen)

2019-07-30 21:04发布

在我的图书馆我有很多形式的函数重载:

/// \brief Does thing.
///
/// \details The thing that is done is very special.
template<typename T>
void do_stuff(const T& t);

/// \brief Does thing repeatedly. 
/// \copydetails do_stuff()
template<typename T>
void do_stuff(const T& t, std::size_t x);

这一点,在一般情况下,工作是相当不错的,但创建相同的文档部分多次。 我要的是,对这些组功能整合在一起。 对细节的描述和每个与它注释的重载的简要说明。 我也不会反对的别名,可以做这样的事情或输入滤波器。

一种方法我能想象这将是:

该文档的结果应该是这样的:

template<typename T>
void do_stuff(const T& t);                (1)

template<typename T>
void do_stuff(const T& t, std::size_t x); (2)

The things that is done is very special.

(1) Does thing.

(2) Does thing repeatedly.

当然,我可以创造一个新的一页,写的那种手工文档,但它需要我重复函数的声明到页面上,然后冲链接到实际的函数文档,但是这是比什么都重要黑客攻击。

有没有一种方法可以轻松地实现这一目标? 甚至暗示它侵入的doxygen将不胜感激。

Answer 1:

可悲的是,使用Doxygen并没有真正有一个机制来做到这一点。 你可以得到的最接近的成员组,但那些不这样做,你需要(他们只出现在成员原型的列表)是什么。

黑客成Doxygen的,无需修改Doxygen的本身,一般会涉及解析它的XML格式,它提出了一些问题。 首先,它的XML格式是可怕做任何有用的事情(相信我,我试过)。 其次,没有语法创建这些功能之间的联系。 所述copydetails线是一样#include在C / C ++; 它列入后不留痕迹。 所以,当它被实际使用,你不能告诉。

第三,你会扔掉所有的Doxygen提供其他格式的。 你会写什么格式,你感兴趣的一个完整的发电机。

修改Doxygen的本身就支持这个会涉及许多步骤。 首先,你必须添加链接的命令语法特殊。 这包括修改所述FuncDef类具有到另一个参考FuncDef它与分组。 其次,你需要修改HTML生成器生成它们在同一个地方。 那一个将是更难了很多比它的声音。 除非Doxygen的内部的源代码已经变得好多了,因为我最后一次看到它,它会做一个显著的痛苦。

该HTML生成具有什么链接到什么,你在找什么人把它们打破了一些基本的假设。 请记住:你不是谁已经从Doxygen的想要这个第一人。 然而,它尚未完成。 其中一个原因是,它是不平凡的实施。 虽然说实话,我想另一个原因是迪米特里根本不相信这是值得永远文档应该怎么做。



Answer 2:

您可以使用@name标签来达到相似的功能。 看看的例子,这很容易。

    /**
     * @name Appends data to the container.
     *
     * @param tag Name of the data entry
     * @param value Data value
     */
    //@{
    /**
     * @brief Documentation for this overload
     */
    void append(const std::string & tag, bool value);

    /**
     * @brief Documentation for this overload
     */
    void append(const std::string & tag, int8_t value);

    void append(const std::string & tag, int16_t value);
    void append(const std::string & tag, int32_t value);
    //@}

它产生以下输出:

我希望这个能帮上忙



文章来源: Grouping overloads in doxygen