2016-12-31 8 views
1

Скажем, у меня есть некоторые внешние библиотеки с незарегистрированной базового класса:Можно ли документировать виртуальный член в производном классе без его переопределения?

class Base { 
public: 
    virtual void func() { /* something */ } 
} 

В моей библиотеке, я хочу, чтобы извлечь из этого класса, и документировать все члены:

class Derived : public Base { 
    /*! 
     @brief do a thing 
    */ 
    void other_func(); 

    /*! 
     @brief do the base thing and another thing 
    */ 
    void func(int arg); 

    /*! 
     @brief do the baseclass thing 

     Also, guarantee some extra invariants XYZ that the baseclass 
     does, but does not require subclassers to do. 
    */ 
    using Base::func; 
    // virtual void func() override; 
    // don't want to declare a new implementation of func() here 
    // so how can I attach a docstring to func() such that doxygen picks up on it? 
} 

Как документировать унаследованный Base::func в Derived.h?

+2

Конечно, вы можете добавить комментарий, но вся идея виртуальных функций-членов заключается в том, что вам НЕ нужно объявлять их, если вы не переопределяете их. И если ваш новый класс НЕ переопределяет его, то почему у вас должна быть/нужна docstring? Он делает то же самое, что делает базовый класс, который, надеюсь, был задокументирован? Если нет, добавьте к нему документацию и опубликуйте патч в качестве обратной связи с исходным поставщиком/автором! –

+3

@MatsPetersson: проблема в том, что он не был задокументирован во внешнем базовом классе, поэтому я хочу добавить документацию в свою библиотеку для ясности, которая будет воспринята doxygen. Кроме того, есть некоторые дополнительные инварианты, которые, как ожидается, встречаются в Derived :: func, которые я хотел бы документировать - так бывает, что 'Base :: func' уже встречается с ними по совпадению, поэтому переопределение не требуется – Eric

ответ

3

Используйте тег @fn. Вы используете этот тег и указываете подпись функции, тогда остальная часть этого блока будет назначена этой функции.

Извините, я приведу пример, но по телефону.

И я бы связался с официальными документами, но разочаровывающе, и несколько по иронии, справочный веб-сайт doxygen не работает на мобильных устройствах. Так что просто Google для этого.

+0

К сожалению, мой фактический случай не работает с этим - у меня есть перегрузка унаследованного имени, и все попытки использовать '\ fn func()' просто добавляют документацию в 'func (int)'. Я обновил свой вопрос, чтобы отразить это – Eric