[求助] 如何将Lambda表达式中函数返回值auto进行显示类型替换?

清钟沁桐 2023-05-13 18:30:29

hi,

   函数内定义了如下到捕获的Lambda表达式,其中的参数top_valueize、valueized是通过捕获方式传入的,目前对应的valueize_op类型使用了auto, 希望通过显示的函数指针类型进行指定?大家看下需要怎么表达

  // ValueizeCondition top_valueize
  // bool valueized = false;
  auto valueize_op = [&](tree op)
  {
      return do_valueize (op, top_valueize, valueized);
   };

 

...全文
91 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
C语言小火车 2023-05-15
  • 打赏
  • 举报
回复

要将 auto 类型替换为显示类型,可以使用函数指针的方式来定义 valueize_op 的类型。需要注意的是,函数指针的类型必须与其所指向的函数的返回值类型和参数列表相匹配。

例如,如果 do_valueize 函数的返回值类型为 int,参数列表为 (tree, ValueizeCondition, bool),则可以使用如下代码将 auto 替换为函数指针类型:

int (*valueize_op)(tree, ValueizeCondition, bool) = [&](tree op, ValueizeCondition top_valueize, bool valueized) {
    return do_valueize(op, top_valueize, valueized);
};

在上述代码中,我们用函数指针 valueize_op 替换了原先的 auto 类型,并使用 lambda 表达式初始化了该函数指针。将 auto 替换为函数指针类型后,lambda 表达式内部就不能再使用捕获方式传入参数了,而应该直接传入参数。

完整示例代码如下:

#include <iostream>

typedef int tree;
typedef int ValueizeCondition;

bool do_valueize(tree op, ValueizeCondition top_valueize, bool valueized) {
    // 具体实现
    return true;
}

int main() {
    ValueizeCondition top_valueize;
    bool valueized = false;
    int (*valueize_op)(tree, ValueizeCondition, bool) = [&](tree op, ValueizeCondition top_valueize, bool valueized) {
        return do_valueize(op, top_valueize, valueized);
    };

    // 使用函数指针调用 lambda 表达式
    bool result = valueize_op(1, top_valueize, valueized);
    std::cout << "result: " << result << std::endl;

    return 0;
}

在上述示例代码中,我们定义了一个新的 valueize_op 函数指针类型,并将其定义为一个返回值为 int 类型、参数列表为 (tree, ValueizeCondition, bool) 的函数指针。然后通过使用 lambda 表达式初始化该函数指针,实现了 valueize_op 的赋值,并最终通过函数指针调用 lambda 表达式实现了 do_valueize 函数的调用。

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧