在火山视窗中使用c++模板(template)的方法
本帖最后由 hcwanz 于 2024-5-6 13:49 编辑灵感来源于PC实现变量引用指针替代读指针处对象 - 火山平台俱乐部 - 火山软件开发平台 - Powered by Discuz! (voldp.com) 用途:告别一长条的各种数组类型,拥抱std::array
遗憾:1.需要模板类型的火山方法必须为嵌入式方法(需要匹配所有类型),因此封装时基本要全部使用c++来写
2.只有加密狗用户可以使用所有类型,一般用户只能使用基础类型或设置了输出名的类型 3.基本告别返回值了
思路如下图所示。
在定义“模板类”时,设置前缀文本“template <typename TYPE>\r\nCDECL”,我们就可以在后续c++代码中使用TYPE模板类型
其中template <typename TYPE>语句和类定义语句不能在一行,
而正常情况下,火山会删除前缀文本中的“\r\n”,所以CDECL等类似的协议是必须的(好像也可以用“/**/”格式的注释)。(搜了一下定义,发现template可以和类定义在一行,所以后缀\r\nCDECL是可以省略的)
在定义“模板类”变量时,设置后缀文本“<模板的实际类型>”,
这样在后续调用模板类型的方法时,模板类型TYPE会自动替换成“模板的实际类型”
<火山程序 类型 = "通常" 版本 = 1 />
包 火山.程序
类 启动类 <公开 基础类 = 程序类 "">
{
方法 启动方法 <公开 类型 = 整数 返回值注释 = "">
{
变量 文本变量 <类型 = 文本型 值 = "a">
变量 整数变量 <类型 = 整数 值 = 0>
变量 整数模板 <类型 = 模板类 @视窗.后缀文本 = "<INT>">
调试输出(1)
整数模板.下判断 (整数变量)
调试输出(2)
整数模板.下判断 (文本变量)
调试输出(3)
返回 (1)
}
}
类 模板类 <公开 @视窗.前缀文本 = "template <typename TYPE>\r\nCDECL">
{
# @ <include>
# @ int 判断(TYPE tt){return 114514;}//它的返回值是无意义的,只要他能运行就证明正确
# @ </include>
方法 下判断 <公开 类型 = 逻辑型 注释 = "专业程序要敢于下判断" @嵌入式方法 = "">
参数 参数 <@匹配类型 = 所有类型>
{
@ @sn<this>.判断(@<参数>)
}
}
我一直想问一下.有@嵌入式方法的子程序转c++代码后,还是否存在下判断这个方法外衣?? 本帖最后由 hcwanz 于 2024-5-4 20:35 编辑
呵呵仙8 发表于 2024-5-4 18:06
我一直想问一下.有@嵌入式方法的子程序转c++代码后,还是否存在下判断这个方法外衣?? ...
不存在了,直接替换成了c++语句,所以有很多限 制,也有很多自 由 何必这么复杂,这样就行,也不是很方便使用
<火山程序 类型 = "通常" 版本 = 1 />
类 标准数组类 <公开 @别名 = "std::vector" @别名类型 = 本地类 @视窗.外部头文件 = "<vector>">
{
方法 取成员数 <公开 静态 类型 = 整数 注释 = "返回数组中的当前已有成员数目" 折叠 @嵌入式方法 = "">
参数 当前对象 <类型 = 标准数组类>
{
@ (INT)@<当前对象>.size()
}
方法 加入成员 <公开 静态 注释 = "将一个所指定类型的成员值加入到本数组的尾部" 折叠 @嵌入式方法 = "">
参数 当前对象 <类型 = 标准数组类>
参数 欲添加成员 <@匹配类型 = 所有类型>
{
@ @<当前对象>.push_back(@<欲添加成员>)
}
方法 取成员 <公开 静态 注释 = "返回所指定索引位置处的成员值" 折叠 @嵌入式方法 = "">
参数 当前对象 <类型 = 标准数组类>
参数 索引位置 <类型 = 整数 注释 = "提供所欲操作成员的索引位置,必须大于等于0且小于数组成员数目.">
参数 成员类型 <注释 = "提供返回成员值的数据类型" @需求类型 = 数据类型 @匹配类型 = 所有类型 @返回值类型 = 0>
{
@ (@<成员类型>&)@<当前对象>[@<索引位置>]
}
}
类 用例
{
方法 例子
{
变量 文本数组 <类型 = 标准数组类 @视窗.后缀文本 = "<CVolString>">
文本数组.加入成员 ("你好")
加入文本 (文本数组.取成员 (0, 文本型), "火山")
调试输出 (文本数组.取成员数 (), 文本数组.取成员 (0, 文本型))
}
}
本帖最后由 hcwanz 于 2024-5-6 13:51 编辑
Xelloss0618 发表于 2024-5-4 19:50
何必这么复杂,这样就行,也不是很方便使用
不用限定成员必须为静态。
实际封装的时候,除非像字节集类那样在c++层面封装好,不然往往是需要自己从火山层面再小改一下的,这时候别名类就不是这么友好了。 本帖最后由 hcwanz 于 2024-5-4 20:30 编辑
Xelloss0618 发表于 2024-5-4 19:50
何必这么复杂,这样就行,也不是很方便使用
其实还行,基础类型就用 取整数、取文本。。。。,火山类可以通用 取成员
页:
[1]