Xelloss0618 发表于 2025-4-22 13:52 嵌入式方法里的选项很少用,用的少的情况下难免有不知道的 |
你这封装手册没看明白啊,@嵌入式方法 的属性值加上 "req_str_param_text_pointer=true" 就行了。 这时你参数传文本型,会自动用GetText() 取文本指针来传参,其他不变。 |
本帖最后由 鱼来鱼往 于 2025-4-22 13:46 编辑 沉默流星 发表于 2025-4-22 13:02 <火山程序 类型 = "通常" 版本 = 1 /> 包 火山.程序 类 启动类 <公开 基础类 = 程序类> { # @begin # <> <include> # # @dt<整数> 火山方法(const wchar_t* 文本) # { # MessageBoxW(nullptr, 文本, 文本, 0); # return 0; # } # # @dt<整数> 火山方法(const @dt<文本型>& 文本) # { # return 火山方法(文本.GetText()); # } # # <> </include> # @end # 方法 启动方法 <公开 类型 = 整数> { // 在此处填入自己的代码 变量 文本 <类型 = 文本型> 变量 字符串指针 <类型 = 文本指针> 文本 = "文本" @ @<字符串指针> = L"字符串指针"; 火山方法 (文本) 火山方法 (字符串指针) 返回 (1) } 方法 火山方法 <静态 类型 = 整数 @嵌入式方法 = ""> 参数 欲操作的对象 <类型 = 启动类> 参数 符号名称 <@匹配类型 = 通用型> { @ @<欲操作的对象>.火山方法(@<符号名称>); } } C:\Users\HCZ\Desktop\Snipaste_2025-04-22_13-10-23.jpg |
本帖最后由 hcwanz 于 2025-4-22 13:24 编辑 沉默流星 发表于 2025-4-22 13:17 非要说的话直接不用`嵌入式方法`就行了, 现代c++编译器拥有自己推导是`函数调用`还是`函数替换`的权力, 所以不用嵌入式方法速度也不会慢. ![]() |
hcwanz 发表于 2025-4-22 13:10 有一个函数实现的嘛 |
本帖最后由 hcwanz 于 2025-4-22 13:16 编辑 沉默流星 发表于 2025-4-22 13:02 定义两个重载的c++方法 |
hcwanz 发表于 2025-4-22 12:21 火山嵌入式方法不支持多次引用火山参数。虽然分成两个方法可以实现,但这是下下策。 |
鱼来鱼往 发表于 2025-4-22 12:46 第三种方式应该如何实现呢,能否给个例子谢谢。 |
本帖最后由 鱼来鱼往 于 2025-4-22 12:49 编辑 好几种方法 一是使用typeid得到的类型名字符串来判断,但是typeid得到的类型名字符串在不同编译器下是不一样的,而且字符串比较是运行时的,会有性能开销,不推荐 二是使用if constexpr,搭配类型萃取,也可以实现,而且没有运行时开销,编译后不存在分支判断,但是if constexpr要求C++17,火山用户普遍用自带的C++14,还有些库很老,开17或许会导致某些库编译不通过,这种方法最好,但是在火山可能存在兼容性问题 三是用嵌入式方法里的参数,全部作为实参去调用另一个嵌入的C++函数,火山函数虽然不支持重载,但是C++支持,嵌入两个C++函数的重载版本,一个接收火山的文本型,一个接收字符串指针,借助C++编译器实现重载,这种方法也没有性能开销,在火山没有兼容性问题,就是要多写些代码 |
|Archiver|手机版|小黑屋|递归火山软件开发平台
( 鄂ICP备18029190号 )
GMT+8, 2025-6-8 15:57 , Processed in 0.089930 second(s), 22 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.