1

我使用mogenerator生成核心数据类。Mogenerator 生成机器类和人类类。开发人员不应该修改机器生成的类,因为每次调用 mogenerator 时都会生成这些类。然而,人类类可以根据开发人员的喜好进行修改。

机器类包含核心数据实体的每个属性的声明。在 Doxygen 中,如何从文件 B 中记录文件 A 中定义的属性?

编辑:添加示例来说明问题

例子:

最终,这里的目标与下面的示例类似。

FileA.h(不能修改)

@interface FileA : NSObject
{
   NSString* myProperty;
}
@end

文件B.h

#include "FileA.h"

@interface FileB : FileA
{
   /**
    * @property myProperty
    *
    * This is the documentation of "myProperty" 
    * defined in FileA but documented in FileB
    */
}
@end

尝试过(@interface FileB @end bock 内的文档块):

@property myProperty - Doxygen 没有将文档与属性相关联。

\property myProperty - Doxygen 不会将文档与属性相关联。

@property FileA::myProperty - Doxygen 不会将文档与属性关联并生成;警告:没有为 FileB::myProperty 找到唯一匹配的类成员

\property FileA::myProperty - 同上

解决方案

文件B.h

#include "FileA.h"

   /**
    * @property FileA::myProperty
    *
    * This is the documentation of "myProperty" 
    * defined in FileA but documented in FileB
    *
    * Documentation block MUST BE outside FileB class
    *
    */

@interface FileB : FileA
{
}
@end
4

2 回答 2

1

(对我来说)不清楚您是否想要FileA记录在案,但您不能将文档插入FileA.h,或者如果您想FileA不记录,但其成员出现在(记录的)派生类FileB中。

如果是前者,您可以为 in 类提供文档FileAFileB.h这将显示为:

/**
 * @class FileA
 * Documentation for FileA
 *
 * @var FileA::myProperty
 * Documentation for myProperty
 */

/**
 * Documentation for FileB
 */
@interface FileB : FileA
{
}

@end

这将导致类FileAFileB出现在生成的文档中,并myProperty记录为FileA.

如果是后者,您可以声明myProperty为 的成员FileB,但使用预处理器保护仅在生成文档时包含声明,例如:

/**
 * document FileB
 */
@interface FileB : FileA
{
#ifdef DOXYGEN
    /**
     * This is the documentation of "myProperty" 
     * defined in FileA but documented in FileB
     */
    NSString* myProperty;
#endif
}

@end

这将导致FileB被记录为好像myProperty是其成员之一。请注意,如果 中的声明myProperty更改FileA,您必须手动更新FileB的声明以反映这些更改。

于 2012-01-12T05:12:50.563 回答
0

您可以使用 Doxygen 的ref命令引用一个锚(例如文件、命名空间、类、函数、变量、枚举等),例如

\ref variable_name

如果您要记录的变量不在本地命名空间或范围内,您可以在变量名称前加上namespace::,其中namespace定义了您所引用的变量的范围或类。例如,考虑以下两个文件(根据 Doxygen 手册中的示例修改):

文件 1

///  A test class.
/**
  A more elaborate class description.
*/
class Test
{
  public:

  /// An enum.
  /** More detailed enum description. */
  enum TEnum {
               TVal1, ///< Enum value TVal1.
               TVal2, ///< Enum value TVal2.
               TVal3  ///< Enum value TVal3.
             }
      /// Enum pointer.
      /** Details. */
      *enumPtr,
      /// Enum variable.
      /** Details. */
      enumVar;

  /// A constructor.
  /**
    A more elaborate description of the constructor.
  */
  Test();
};

文件 2

//  Another test class.
/**
  This class depends on the variable \ref Test::TEnum, defined in another file.
  It doesn't, actually, but I've said it does.
*/
class AnotherTest
{
  public:

  /// A constructor
  AnotherTest();

};

这里是在第一个文件TEnum中的类中定义的。Test所以在第二个文件中,我们在变量名前加上定义它的类,即Test::TEnum.

有关全局命名空间前缀的更多信息,请参阅问题Reference static const variables declared in namespace prefix的公认答案::

于 2012-01-11T12:28:48.390 回答