Doxygen CRTP函数专门化:添加到接口函数的docstring中

Doxygen CRTP函数专门化:添加到接口函数的docstring中,doxygen,Doxygen,我正在实现由CRTP派生的类。这就需要在需要时进行功能专业化。现在,对于派生类中的特定专业,我想在“全局”接口函数的docstring中添加一些内容。我如何才能做到这一点(使用doxygen 1.9.1) 例子 考虑这个例子: 模板 类公共接口 { 公众: /** \简要介绍我的常用功能描述。 */ void foo() { 静态_cast(this)->foo_impl(); } }; A类:公共公共接口 { 公众: A()=默认值; 私人: void foo_impl(){}; 好友类公共接

我正在实现由CRTP派生的类。这就需要在需要时进行功能专业化。现在,对于派生类中的特定专业,我想在“全局”接口函数的docstring中添加一些内容。我如何才能做到这一点(使用doxygen 1.9.1)

例子 考虑这个例子:

模板
类公共接口
{
公众:
/**
\简要介绍我的常用功能描述。
*/
void foo()
{
静态_cast(this)->foo_impl();
}
};
A类:公共公共接口
{
公众:
A()=默认值;
私人:
void foo_impl(){};
好友类公共接口;
};
A::foo()
作为
CommonInterface::foo
的派生方法显示在
A
的文档中。现在,我想为方法
foo
添加一些文档,这些文档仅在
class A
的文档中可见,而在
class CommonInterface
的文档中不可见

我不想:

  • 重写函数,我使用CRTP是为了避免重写,因为我使用模板化的“重写”
  • 文档
    foo_impl()
    ,因为它在公共文档中没有任何意义

不是答案,而是解决办法

我不认为在doxygen中存在这样的东西,但也许下面的方法是可以接受的

Doxyfile

EXTRACT_ALL            = YES
QUIET                  = YES
MACRO_EXPANSION        = YES
PREDEFINED             = DOXYGEN
HAVE_DOT               = YES
CALL_GRAPH             = YES
CALLER_GRAPH           = YES
aa.h

template <class D>
class CommonInterface
{
public:
    /**
    \brief My common function description.
    \details My common function detailed description.
    */
#if DOXYGEN
virtual
#endif
    void foo()
    {
        static_cast<D*>(this)->foo_impl();
    }
};

class A : public CommonInterface<A>
{
public:
    A() = default;

#if DOXYGEN
/**
\copydoc CommonInterface::foo

Some extra documentation for A::foo ?
*/
    void foo()
    {
        static_cast<D*>(this)->foo_impl();
    }
#endif
private:
    void foo_impl() {};

    friend class CommonInterface<A>;
};
模板
类公共接口
{
公众:
/**
\简要介绍我的常用功能描述。
\详细介绍我的常用功能详细说明。
*/
#如果氧
事实上的
#恩迪夫
void foo()
{
静态_cast(this)->foo_impl();
}
};
A类:公共公共接口
{
公众:
A()=默认值;
#如果氧
/**
\copydoc CommonInterface::foo
A::foo的一些额外文档?
*/
void foo()
{
静态_cast(this)->foo_impl();
}
#恩迪夫
私人:
void foo_impl(){};
好友类公共接口;
};

您的意思是想为方法foo添加一些文档,这些文档仅在类A的文档中可见,而在类CommonInterface的文档中不可见?@albert是的,这正是我的意思!我根据你的公式编辑,比我的好得多。非常感谢你的努力。事实上,这就可以了,尽管仅仅为文档提供源代码在美学上并不令人惊讶。在doxygen中,一个伪造函数定义的函数在这方面看起来会更好。但我想这可能与Doxygent中的某些东西背道而驰。这确实是一个有点肮脏/不美观的把戏。我认为这种“奇怪的重复模板模式”是一种非常特殊的情况(我以前从未见过)。我没有很快看到在派生类中实现特定于非虚拟函数的东西的真正可能性(我认为这就是这里发生的事情)。也许值得在doxygen github问题跟踪器中解决一个增强问题(尽管我对修复的机会并不乐观)!(CRTP确实很奇怪,它的名字是什么,但我需要它来模板化
覆盖
函数)Oops我写了“我以前从未见过它”,但我现在看到doxygen在它自己的代码中也使用了它(例如在docparser.h:
类DocRoot:public CompAccept
)一定在我的比特桶中