鱼C论坛

 找回密码
 立即注册
查看: 1406|回复: 4

[已解决]一个参数的含义

[复制链接]
发表于 2021-6-21 22:59:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 cjiang3 于 2021-6-24 23:00 编辑

情况1: 目前在法国读博, 面一家实习单位 ,面试题 没做出来, 耿耿于怀 ,虽然失败了 , 但题目还在
         (ta(某法国HR)给我讲了一个很大的故事,image 的stream processing 要确保同步, 实时什么的), 但关键不在这里,
           他从项目里抠了一个代码,(我从 #ifndef RunTests 看出来的) , 就下面代码, 全部, 在没有上下文和需求的情况下, 很难做出来,原题是要实现todo里的内容,10个小需求, 确保数据流。。。。。。
            介绍一下自己, 本人不是学渣, 有着多年C/C++, python 经验,opencv , ros方向,但看到这题后懵了,


本体集成了 ,container , iterator , template , 确实是项目中抠出来的代码 ,理解起来就很费劲 ,我把原题需求删了,只要大家回答我下面的问题 ,自己也会看一些 overstack上别人的解释,但觉得有必要这么复杂吗,(正因为,是项目源代码才觉得没老外这么写是有它的意义的),当然也不排除为了测试而测试, 把简单的东西搞复杂。。。


我的问题 :    const F1& f1, const F2& f2 ,看样子是传函数指针 ,      但传入的是
        

        [](const Event& e){
                std::cout << e.t << " [" << e.x << "," << e.y << "]" << std::endl;
        }  


如何解释, ([] 是震惊到我的地方,之前没遇见过)

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <stdexcept>

struct Event {
        int x, y;             //position
        unsigned long long t; //timestamp
};

template <typename F1, typename F2>
void iterate(const std::vector<Event>& first_stream, const std::vector<Event>& second_stream, const F1& f1, const F2& f2) {
        // TODO
        //throw std::runtime_error("Implement me");
}

#ifndef RunTests
int main(int argc, char* argv[]) {
        std::vector<Event> first_stream{ Event{ 0, 1, 1 }, Event{ 0, 2, 2 }, Event{ 0, 3, 4 } };
        std::vector<Event> second_stream{ Event{ 1, 0, 1 }, Event{ 2, 0, 3 }, Event{ 3, 0, 4 } };
        iterate(first_stream, second_stream,
                [](const Event& e){
                std::cout << e.t << " [" << e.x << "," << e.y << "]" << std::endl;
        }
,
                [](const Event& e1, const Event& e2) {
                std::cout << e1.t << " [" << e1.x << "," << e1.y << "] [" << e2.x << "," << e2.y << "]" << std::endl;
        }

        );

        getchar();
}
#endif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-21 23:02:25 | 显示全部楼层
编译没问题 在vs2013上 , 但在devC++ 上 ,回报C++ 98 标准兼容性问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 01:05:09 | 显示全部楼层
自己解决了

是一个lambda 表达式的传参形式 C++11 ,之前没遇见过 ,貌似全网就我一个回答(哈哈) ,希望以后遇到这个问题看到此贴的朋友可以说声感谢

https://docs.microsoft.com/en-us ... n-cpp?view=msvc-160

是有些难度 , 这么用的人不多, 往往是在架构人员设计消息响应机制时候才用到 ,比如 传函数指针,但是 像这种情况,传整个函数的lambda表达式用的更少了 , 希望能够帮到那些想要挑战架构设计(变态难度)的同学 ,还有我自己

(看我鼠标指向, 和蓝色代码块)
我写了个简单函数 , 用lambda 表达式来传递 ,可以发现 成功了, 出题者用 const typename & param 来作为参数 的意愿是可以传任何lambda表达式(即任何函数,有参无参有返回无返回等等),即不受任何物理限制, 达到完全自由(很厉害,我是面试失败后才发现这一点的)。


无标题.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 01:10:59 | 显示全部楼层
附上完整代码的图片
无标题.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 05:40:33 | 显示全部楼层
本帖最后由 cjiang3 于 2021-6-22 05:48 编辑

https://fishc.com.cn/forum.php?mod=viewthread&tid=197875

我的这个问题的最终解决方案 ,
1) template + lambda 的联合使用
2)无捕获, 值捕获, 引用捕获

temp.rar

1.63 KB, 下载次数: 0

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 14:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表