【问题标题】:Mark overridden functions标记覆盖的函数
【发布时间】:2012-05-12 09:24:33
【问题描述】:

是否存在命令,例如 \deprecated,但要标记被覆盖的函数?

Java 有一个注释 @override 用于您已覆盖的函数。我想在 C++ 中做同样的事情,这样我就可以看到我覆盖的超类函数。最好的情况是,文档页面还应该显示所有类成员函数,它们是继承的,但没有被超类函数的超链接显式覆盖。

我知道有一种方法可以从超类方法中复制文档。但我不想复制整个文档。我只想知道,一个函数是继承的。该行为应该类似于使用条形标记那些旧功能的已弃用选项。

【问题讨论】:

标签: c++ overriding doxygen


【解决方案1】:

每个被覆盖的函数都会自动收到它已被重新实现的通知。例如,派生类中的重写函数会收到“Reimplemented from MyBaseClass”的通知。

它还在基类的文档中放置了一个通知。有提到“在测试中重新实现”

要显示所有函数,包括继承的函数,您可以将INLINE_INHERITED_MEMB 设置为YES。然后 Doxygen 将每个继承但未覆盖的函数的文档复制到派生类的文档中。

例如,当使用这个来源时:

class TestBase
{
    public:
        /**
         * Base class function.
         */
        virtual void function();

      /**
       * Another function.
       */
      virtual void another();
};

class Test: public TestBase
{        
    public:
        /**
         * Overridden function.
         */
        virtual void function();
};

INLINE_INHERITED_MEMB 设置为YES 将导致Derived 类的以下文档:(使用Doxygen 1.7.6)

会员功能文档

virtual void TestBase::another ( ) [virtual, inherited]
另一个功能。

virtual void Test::function ( ) [virtual]
派生。
从 TestBase 重新实现。

我想这就是你要找的。​​p>

【讨论】:

  • 嗨,谢谢,这是一个很好的提示,但对我来说不是整个解决方案。如果我覆盖我自己的函数,那没关系,但如果我覆盖例如一个 qt 函数,doxygen 无法识别它已被覆盖。我也没有得到括号中的继承块,而只是重新实现的消息。没关系,但我希望,我可以直接在成员列表概览中看到被覆盖的状态。
  • 有点晚了,但是你可以使用标签文件让 Doxygen 知道其他地方记录的类。如果您有 QT 的标记文件,那么(我认为)它应该标记从 QT 继承的函数。不过没试过。
【解决方案2】:

C++11 开始,您可以使用 override 说明符:

class A {
    virtual void jump() = 0;
    void talk() {}
};

class B: public A {
    void jump() const override {...} // Error: B:: jump does Not overrides A:: jump (A::Jump is not const...)
    void jump() override {...} // OK: B:: jump overrides A:: jump
    void talk() override {...} // Error: A::talk is not virtual
};

原始示例和官方文档:http://en.cppreference.com/w/cpp/language/override

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2010-10-25
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多