将定义分组为模块
为避免名称冲突,并提供更好的 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
。
此外,模块在生成特定于语言的文件时具有一定的优势。 如果需要,工具 cppumaker 和 javamaker 将自动为每个引用的 module 创建子目录。头文件和类定义保存在各自的文件夹中,因而无需更进一步的操作。
可能混淆的一个原因是 UNOIDL 和 C++ 使用 “::
” 分隔名称中的单个标识符,而 UNO 本身(例如在类似 com.sun.star.lang.XMultiComponentFactory:createInstanceWithContext 的方法中)和 Java 使用 “.
”。
Content on this page is licensed under the Public Documentation License (PDL). |