欢迎访问 Lu程序设计
用C/C++设计Lu结构、字典、类等高级数据类型
1 说明
本文没有直接给出演示例子,而是对Lu系统扩展库LuSystem实现的结构、字典、类等高级数据类型做说明,但你仍然需要下载Lu32脚本系统,并下载软件包lu1code.rar,LuSystem的源代码就在这个软件包中,源代码中用到的Lu核心库函数仍然参考Lu编程指南。由于LuSystem是一个Lu扩展动态库,你可能还要参考Lu扩展动态库说明。
本文假定你已经阅读了本教程系列的前面的内容,对涉及到的Lu基本数据类型、Lu键树、以#开头的标识符(字符串)确定的唯一的整数等内容不再重复说明。
2 关于Lu系统扩展库LuSystem
LuSystem32.dll是一个Lu系统扩展动态库,包含一些增强Lu系统功能的函数、对系统内置类型的扩展以及一些新增数据类型等等。LuSystem不仅是对Lu系统的扩充,更在于演示Lu是极易扩充其功能的脚本,很少有脚本允许用户能方便地添加像字典、结构、类等高级的数据结构,但Lu允许,而且实现这些很容易,因而,LuSystem也是编程用户极佳的练手工具。
为了便于理解本文,可以先看一下头文件LuSystem32.h(包含了字典、结构、类等数据结构的定义)和该库的入口文件LuSystem32.cpp(定义了函数LuDll32,Lu扩展库唯一的输出函数)。
3 结构(struct)实现原理及难点分析
结构(struct)是一个线性表,可以存放若干任意的Lu数据。结构成员必须以#开头。结构成员的存储顺序(递增排列)与其定义顺序不一定相同,当然这并不影响使用。例如以下脚本代码:
!!!using("sys"); //使用命名空间sys
struct[#num, #姓名 : "luuu", #年龄].o[]; //函数o用于输出一个对象
结果(成员#num和#年龄没有赋值,故值为nil):
struct{#num : nil , #姓名 : luuu , #年龄 : nil}
从头文件LuSystem32.h中可找到的结构(struct)定义如下:
struct SStruct{ //结构
luINT max; //成员数目
luVOID *Name; //成员名字(递增排列以加快访问速度),由一个以#开头的标识符(字符串)确定的唯一的整数
LuData *Member; //成员
};
注意结构定义中,成员名字不是使用字符串,而是使用由该字符串确定的一个唯一整数来标识,显然这样访问速度更快,并且成员是递增排列的,更加快了访问速度;另外,结构成员是Lu基本数据类型,这样可以存储任意的数据,包括另一个结构对象,甚至是自身。
从结构的实现文件Struct.cpp中可以找到如下两个函数:
void _stdcall DelStruct(void *vStruct) /