递归火山软件开发平台

标题: 匿名函数这种应该如何封装 [打印本页]

作者: 沉默流星    时间: 4 天前
标题: 匿名函数这种应该如何封装
本帖最后由 沉默流星 于 2025-8-15 17:47 编辑

代码如下:
  1.    CROW_ROUTE(app, "/")([]() {
  2.         return "Hello world ";
  3.         });
复制代码
  1. #define CROW_ROUTE(app, url) app.template route<crow::black_magic::get_parameter_tag(url)>(url)
复制代码



作者: hcwanz    时间: 4 天前
建议称为匿名方法(函数), 定义一个类的静态方法, 然后当匿名方法去传就行.
这玩意火山没有对应概念.

大概用法:
CROW_ROUTE(...)(火山类名::静态方法)

注意别在`静态方法`后加`()`, 这里是传入, 不是调用.
作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 16:33
建议称为匿名方法(函数), 定义一个类的静态方法, 然后当匿名方法去传就行.
这玩意火山没有对应概念.

请给个例子
作者: hcwanz    时间: 4 天前
本帖最后由 hcwanz 于 2025-8-15 17:43 编辑

(, 下载次数: 12)


作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 17:40

好像不行
(, 下载次数: 11)

(, 下载次数: 12)

(, 下载次数: 11)
就算强转都不行
(, 下载次数: 12)

(, 下载次数: 12)

作者: hcwanz    时间: 4 天前
本帖最后由 hcwanz 于 2025-8-15 17:57 编辑

返回值类型改一下, 我这里是为了方便用的文本型
作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 17:55
返回值改一下, 我这里是为了方便用的文本型

返回值改成什么
作者: hcwanz    时间: 4 天前
我怎么知道, 你从c++的源码里翻啊
作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 17:57
我怎么知道, 你从c++的源码里翻啊

应该不行,C++中他是一个类,他这个类怎么支持传字符串类型? (, 下载次数: 10)

(, 下载次数: 12)

作者: hcwanz    时间: 4 天前
本帖最后由 hcwanz 于 2025-8-15 18:07 编辑

他这个类的构造函数接受的是字符数组, 返回类型应该要用字符指针(要多字节指针, 火山默认的是宽字节),

类型是 char*, 你看看火山官方封了没, 没有自己封一个.
然后把静态方法改成嵌入式的:

字符指针 拟匿名方法()
{
  @ return "你好";
}



作者: 沉默流星    时间: 4 天前
没搞明白
(, 下载次数: 11)

(, 下载次数: 11)

(, 下载次数: 12)

作者: hcwanz    时间: 4 天前
不要去封这个类中类, 直接让匿名函数返回文本指针.
作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 18:40
不要去封这个类中类, 直接让匿名函数返回文本指针.

(, 下载次数: 13)

(, 下载次数: 10)

作者: hcwanz    时间: 4 天前
嵌入式写就行, @ return "你好";
作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 18:57
嵌入式写就行, @ return "你好";

不行的,回调函数模板不能是嵌入式方法 (, 下载次数: 10)

作者: hcwanz    时间: 4 天前
用嵌入式写 != 用嵌入式方法
作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 19:02
用嵌入式写 != 用嵌入式方法

我知道
(, 下载次数: 10)

(, 下载次数: 12)

作者: hcwanz    时间: 4 天前
缺少`;`
作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 19:09
缺少`;`

(, 下载次数: 10)

作者: hcwanz    时间: 4 天前
LPTSTR有可能指向宽字节LPWSTR, 你试试封个char*的
作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 19:12
LPTSTR有可能指向宽字节LPWSTR, 你试试封个char*的

(, 下载次数: 9)

(, 下载次数: 15)

作者: hcwanz    时间: 4 天前
剩下这个报错你要不清理一下解决方案试试, 怎么感觉是旧文件的错
作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 19:29
剩下这个报错你要不清理一下解决方案试试, 怎么感觉是旧文件的错


(, 下载次数: 14)

(, 下载次数: 13)

作者: hcwanz    时间: 4 天前
先提供另一个思路, 我之前弄的火山视窗封装匿名函数的方法:
https://bbs.voldp.com/forum.php? ... D%E5%87%BD%E6%95%B0
作者: hcwanz    时间: 4 天前
然后你看下翻译后的c++文件, 这个报错的语句具体是个啥
作者: Xelloss0618    时间: 4 天前
多字节文本指针啊……
作者: 沉默流星    时间: 4 天前
Xelloss0618 发表于 2025-8-15 19:39
多字节文本指针啊……

(, 下载次数: 15)

(, 下载次数: 13)

作者: 沉默流星    时间: 4 天前
hcwanz 发表于 2025-8-15 19:35
然后你看下翻译后的c++文件, 这个报错的语句具体是个啥

(, 下载次数: 13)

(, 下载次数: 11)

(, 下载次数: 14)

作者: 龙纹    时间: 4 天前
无法转换为 const_str 的报错原因是 url 参数的问题, 在路由方法里这样修改一下应该就可以了: @sn<quot>@pvpt<url>@sn<quot>
作者: 沉默流星    时间: 4 天前
龙纹 发表于 2025-8-15 20:30
无法转换为 const_str 的报错原因是 url 参数的问题, 在路由方法里这样修改一下应该就可以了: @sn@pvpt@sn ...

如何传入数据呢 (, 下载次数: 13)

作者: 龙纹    时间: 4 天前
沉默流星 发表于 2025-8-15 20:53
如何传入数据呢

我看了一下官方示例, 要求传入的是函数对象, 也特化了很多个函数对象, 参考示例转成火山静态方法, 参数正常写就行了, 看报错和生成后的代码跟示例有什么不一样.
(顺便说一句, 虽然C++的报错有些时候显得莫名其妙, 但大多都还是给出了直接的原因, 学会看报错是学习C++必不可少的一环)
作者: 沉默流星    时间: 3 天前
龙纹 发表于 2025-8-15 23:59
我看了一下官方示例, 要求传入的是函数对象, 也特化了很多个函数对象, 参考示例转成火山静态方法, 参数正 ...

我说的是多字节文本指针如何赋值文本数据呢
作者: 龙纹    时间: 3 天前
沉默流星 发表于 2025-8-16 05:52
我说的是多字节文本指针如何赋值文本数据呢

这个问题我回答不了, 需要你自己去理解指针, 如果确实搞不清楚, 那就不要封装这个函数对象, 封装一个 [](request& req, response& res){} 的接口, 足够使用了
作者: 沉默流星    时间: 3 天前
龙纹 发表于 2025-8-16 11:04
这个问题我回答不了, 需要你自己去理解指针, 如果确实搞不清楚, 那就不要封装这个函数对象, 封装一个 []( ...

哪应该如何封装呢




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4