【问题标题】:Doxygen generates entries for enums, but not for their membersDoxygen 为枚举生成条目,但不为其成员生成条目
【发布时间】:2012-01-04 08:40:17
【问题描述】:

我的 .h 文件中有一个枚举,如下所示:

/** \memberof MyClass
  Values for keypress bitmasks for #method and MyClassDelegate#otherMethod */
enum MY_KEYS {
  MY_KEY_1_DOWN,    /**< KEY 1 press */
  MY_KEY_1_UP,      /**< KEY 1 release */
  MY_KEY_2_DOWN,    /**< KEY 2 press */
  MY_KEY_2_UP,      /**< KEY 2 release */
};

Doxygen 在“公共类型”以及显示详细描述的“成员枚举文档”下为此枚举生成一个条目。但是,它不会为枚举成员生成任何文档。我想列出我的枚举成员并对其进行评论,以便我的用户可以知道在他们正式的参数类型是这个枚举的地方使用哪些值。

不知道它是否相关——这是在 Objective-C 中,因此 \memberof MyClass 会显示在此类的页面上。

【问题讨论】:

    标签: objective-c c doxygen


    【解决方案1】:

    不确定为什么 doxygen 看不到 \memberof 命令继承的枚举值。如果您手动将单个值设置为枚举或类的成员,它也不起作用。

    无论如何,解决方法是,如果您希望枚举实际出现在类中,则需要在类接口中定义它:

    @interface MyClass : NSobject
    
    /**
      Values for keypress bitmasks for #method and MyClassDelegate#otherMethod 
    */
    enum MY_KEYS {
      MY_KEY_1_DOWN,    /**< KEY 1 press */
      MY_KEY_1_UP,      /**< KEY 1 release */
      MY_KEY_2_DOWN,    /**< KEY 2 press */
      MY_KEY_2_UP,      /**< KEY 2 release */
    };
    
    @end
    

    这实际上更有意义 IMO,因为不能保证头文件包含相关类型 - 这只是良好设计的预期。

    【讨论】:

      【解决方案2】:

      我偶然发现了同样的问题(尽管对于纯 C 文档)-不幸的是,这似乎是 Doxygen 的问题,请参阅相应的 Bugzilla 条目

      如果枚举是 a 的成员,则枚举中的单个值未记录在案 C类

      https://bugzilla.gnome.org/show_bug.cgi?id=762320

      或较旧的相关错误:

      当使用@relatesalso 时,Doxygen 不会输出枚举的成员。

      https://bugzilla.gnome.org/show_bug.cgi?id=609299

      更新:

      解决此问题的快速修复(在 Doxygen 1.8.11 中测试):

      编辑 src/doxygen.cpp 并删除(或注释)函数 addEnumValuesToEnums 中的第 7375 行:

      if (!e->name().isEmpty() && (fmn=(*emnsd)[e->name()]))
        // get list of members with the same name as the field
      {
        MemberNameIterator fmni(*fmn);
        MemberDef *fmd;
        for (fmni.toFirst(); (fmd=fmni.current()) ; ++fmni)
        {
          /* REMOVED LINE 7375: if (fmd->isEnumValue() && fmd->getOuterScope()==md->getOuterScope()) // in same scope */
          {
            //printf("found enum value with same name %s in scope %s\n",
            //    fmd->name().data(),fmd->getOuterScope()->name().data());
            if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
            {
      

      C 枚举的“外部范围”仍然设置为全局,即尚未到达添加枚举成员值的块。

      请注意,我只是做了一个简短的检查,并没有彻底测试修复 - 它可能有副作用....

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多