C++ 我应该如何记录用C+编写的luaapi/对象模型+;密码?

C++ 我应该如何记录用C+编写的luaapi/对象模型+;密码?,c++,lua,documentation-generation,C++,Lua,Documentation Generation,我正在为游戏Bitfighter记录一个新的和扩展的LuaAPI(http://bitfighter.org). 我们的LUA对象模型是C++对象模型的子集,而我需要向LoA公开的方法是C++中可用的方法的子集。我只想记录与Lua相关的项目,而忽略其他项目 例如,对象bfObject是所有Lua对象的根,但本身位于C++对象树的中间。BFObjor有大约40种C++方法,其中大约10种与Lua脚本相关。我希望我们的文档将BfObject显示为根对象,并且只显示这10个相关方法。我们还需要以一种

我正在为游戏Bitfighter记录一个新的和扩展的LuaAPI(http://bitfighter.org). 我们的LUA对象模型是C++对象模型的子集,而我需要向LoA公开的方法是C++中可用的方法的子集。我只想记录与Lua相关的项目,而忽略其他项目

例如,对象bfObject是所有Lua对象的根,但本身位于C++对象树的中间。BFObjor有大约40种C++方法,其中大约10种与Lua脚本相关。我希望我们的文档将BfObject显示为根对象,并且只显示这10个相关方法。我们还需要以一种明确方法继承的方式显示其子对象

目前我们可以假设所有代码都是用C++编写的。 一个想法是,以某种方式标记我们想要记录的对象,使系统(如doxygen)知道该看什么,而忽略其余的。另一种方法是预处理C++代码,这样可以删除所有非相关的位,并记录剩下的东西,比如doxGEN。(实际上,我在使用luadoc的方法上取得了很大的进步,但找不到让luadoc显示对象层次结构的方法。)

有一件事可能会被证明是有用的,那就是每个Lua对象类都是以一致的方式注册的,以及它的父类

有越来越多的游戏使用Lua编写脚本,其中许多都有不错的文档。有人对如何制作它有好的建议吗



PS,澄清,我很高兴使用任何工具来完成这项工作——DoXEGEN和LUADOC只是我熟悉的例子。

可以用C++代码中的命名空间(也可以是类)排除,但不是Lua代码

EXCLUDE_SYMBOLS = myhier_cpp::*
在doxygen配置文件或cherry中,使用

/// @cond
class aaa {
  ...
  ...
}

/// @endcond
<>你的C++代码。

我个人认为,由于名字空间的分离,代码和文档的分离,这导致了一个基于命名空间的纯C++与Lua绑定分离的方案。


通过排除分离可能是最有针对性的方法,但这将需要一个额外的工具来解析代码、标记相关的lua部分并将排除添加到代码中。(此外,您还可以使用此标记单独呈现特殊信息,如图形,并通过图像将其添加到文档中,至少使用Doxygen很容易做到这一点。)。由于必须有某种lua代码的指示,因此可能不太难导出标记。

我找到了一个解决方案,虽然不理想,但效果很好。我拼凑了一个Perl脚本,它将所有Bitfighter源代码都撕碎,并生成第二组“伪”源代码,其中只包含我想要的元素。然后,我可以通过Doxygen运行这个辅助源,并得到一个结果,这个结果是我想要的结果的95%

我宣布胜利

这种方法的一个优点是,我可以用一种“自然”的方式记录代码,并且不需要担心标记什么在里面,什么在外面。该脚本足够聪明,可以从代码结构中找到它

如果有人感兴趣,可以在Bitfighter源代码归档中找到Perl脚本。它只完成了大约80%,并且缺少了一些非常重要的项目(例如正确显示函数args),但是结构仍然存在,我很满意这个过程能够正常工作。脚本将随着时间的推移而改进

该过程的(非常初步的)结果见。模板几乎没有被修改过,所以它有一个非常“库存”的外观,但它表明事情或多或少是可行的

由于一些评论者认为使用Doxygen生成好的文档是不可能的,我应该注意到,我们几乎没有添加任何内联文档。要了解它们的外观,请参阅Teleporter类。这并不是非常好,但我认为它驳斥了强氧总是产生无用文档的观点

在这一点上,我最遗憾的是,我的解决方案实际上是一次性的,没有解决我认为社区中日益增长的需求。也许在某个时候,我们将对C++和Lua的合并进行标准化,创建通用文档工具的任务将更易于管理。
PS您可以看到原始源文件中的标记是什么样的。。。请参阅并搜索@luaclass,另一个解决方案是使用。它还允许您编写C++注释,这些注释将由LDoc解析并被包含到文档中。 一个优点是,您也可以使用相同的工具来记录lua代码。缺点是项目似乎没有维护。也可能无法像前面提到的提问者那样记录复杂的对象层次结构


我自己做了一些关于C++的小调整。看看。

p.S:这看起来很像xpilots:)Doxygen很难生成好的文档。它唯一能做的就是列出方法。DeadMG:取决于您使用Doxygen做什么。Qt项目使用自定义版本的Doxygen(qtdoc),并生成我见过的最好的API文档之一。@StefanMajewsky:他没有说“Qt修改的Doxygen无法生成好的文档。”Doxygen处理得很好,但是它产生的文档的格式还有待改进。格式是通过html/css完成的,这应该已经足够了,再加上在线提供了大量模板。Doxygen生成调用图,即层次结构的UML类图,允许自定义文档结构以及图形和其他内容的自定义嵌入。这种方法的一个问题是,BfObject的父类似乎仍然被引用,即使它们是