将定义分组为模块

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


为避免名称冲突,并提供更好的 API 结构,UNOIDL 支持命名范围。相应的指令是 module:

  module mymodule {
  };

模块 mymodule 中的指令仅为在此 module {} 花括号对中定义的类型已知。在每个模块中,类型标识符是唯一的。因此,UNOIDL 模块与 Java 软件包或 C++ 名称空间类似。


模块可以嵌套。以下代码显示了模块 star 中包含的模块 bridge 包含的 XUnoUrlResolver 接口,模块 star 又包含在模块 com 中的 sun 模块中。

  module com { module sun { module star { module bridge {
      // interface XUnoUrlResolver in module com::sun::star::bridge
  }; }; }; };


按照惯例,模块名称使用小写字母。对于 IDL 类型,请使用您自己的模块分层。要将代码分发到 OpenOffice.org,请使用 org::openoffice 名称空间或 com::sun::star。如果要加入到后一个模块,请先与 www.openoffice.org 中 API 项目的引导人讨论名称的选择。com::sun::star 名称空间反映了 OpenOffice.org 在 StarSuite 中的历史渊源,而且为了实现兼容会将其保留下来。


在 UNOIDL 模块中定义的类型必须使用完整类型或符合范围的名称进行引用,即必须输入包含您的 类型的所有模块,并用范围运算符 :: 来分隔模块。例如,要在另一个 idl 定义文件中引用 XUnoUrlResolver,应该写 com::sun::star::bridge::XUnoUrlResolver


此外,模块在生成特定于语言的文件时具有一定的优势。 如果需要,工具 cppumakerjavamaker 将自动为每个引用的 module 创建子目录。头文件和类定义保存在各自的文件夹中,因而无需更进一步的操作。


可能混淆的一个原因是 UNOIDL 和 C++ 使用 “::” 分隔名称中的单个标识符,而 UNO 本身(例如在类似 com.sun.star.lang.XMultiComponentFactory:createInstanceWithContext 的方法中)和 Java 使用 “.”。


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages